#include
#define BLINKER_WIFI
#include
char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";
// 新建组件对象
BlinkerButton Button1("btn-max"); //位置1 按钮 数据键名
BlinkerButton Button2("btn-min"); //位置2 按钮 数据键名
BlinkerButton Button3("btn-pw"); //循环模式 按钮 数据键名 开关模式
Servo myservo;
BlinkerSlider Slider1("max-num"); //位置1 滑块 数据键名 范围1-180
BlinkerSlider Slider2("min-num"); //位置2 滑块 数据键名 范围1-180
BlinkerSlider Slider3("ser-num"); //实时位置 滑块 数据键名 范围1-180
BlinkerSlider Slider4("time-num"); //循环模式间隔时间 滑块 数据键名 范围单位毫秒
Servo myservo;
bool xunhuan_mode = false;
int servo_max,servo_min,ser_num,time_num;
void button1_callback(const String & state) { //位置1按钮
BLINKER_LOG("get button state: ", servo_max);
myservo.write(servo_max);
Blinker.vibrate();
}
void button2_callback(const String & state) { //位置2按钮
BLINKER_LOG("get button state: ", servo_min);
myservo.write(servo_min);
Blinker.vibrate();
}
void button3_callback(const String & state) { //位置3按钮 开关模式
// Blinker.vibrate();
if(state == "on"){
xunhuan_mode = true;
Button3.print("on");
Blinker.delay(100);
}else if (state == "off"){
xunhuan_mode = false;
Button3.print("off");
Blinker.delay(100);
}
}
void slider1_callback(int32_t value)
{
servo_max = value;
Slider1.color("#1E90FF");
Slider1.print();
BLINKER_LOG("get slider value: ", value);
}
void slider2_callback(int32_t value)
{
servo_min = value;
Slider2.color("#FFF8DC");
Slider2.print();
BLINKER_LOG("get slider value: ", value);
}
void slider3_callback(int32_t value)
{
ser_num = value;
myservo.write(ser_num);
Blinker.delay(100);
BLINKER_LOG("get slider value: ", value);
}
void slider4_callback(int32_t value)
{
time_num = value;
Blinker.delay(100);
BLINKER_LOG("get slider value: ", value);
}
void xunhuan(){
myservo.write(servo_max);
Blinker.delay(time_num/2);
myservo.write(servo_min);
Blinker.delay(time_num/2);
}
void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Slider1.attach(slider1_callback);
Slider2.attach(slider2_callback);
Slider3.attach(slider3_callback);
Slider4.attach(slider4_callback);
myservo.attach(2);
myservo.write(10);
servo_max=70;
servo_min=120;
time_num=500;
}
void loop() {
Blinker.run();
if(xunhuan_mode==true){
xunhuan();
}
}
#include //引入舵机的库
#define BLINKER_WIFI//预定义Blinker WIFI函数
#include //引入Blinker库
char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";
//关于准备部分已经详细介绍过了,如果有疑问可以移步第一课,感谢
// 新建组件对象
BlinkerButton Button1("btn-max"); // 按钮 数据键名:“位置1”
BlinkerButton Button2("btn-min"); // 按钮 数据键名:“位置2”
BlinkerButton Button3("btn-pw"); // 开关模式按钮 数据键名:“循环模式”
BlinkerSlider Slider1("max-num"); // 滑块 数据键名:“位置1” 范围1-180
BlinkerSlider Slider2("min-num"); // 滑块 数据键名:“位置2” 范围1-180
BlinkerSlider Slider3("ser-num"); // 滑块 数据键名:“实时位置” 范围1-180
BlinkerSlider Slider4("time-num"); // 滑块 数据键名:“循环模式间隔时间” 单位毫秒
这7个组件的组合效果详情可以观看 暴改车间主任 的抖音《ESP8266舵机控制》!
如果您不嫌我这啰嗦就将就看以下我描述的效果:
1.“位置1滑块”与“位置2滑块”分别是用来调节舵机的位置下限与上限的。注意:调节滑块,舵机不动
2.“位置1按键”与“位置2按键”分别是用来让舵机到达‘位置1’与‘位置2’的。注意:调节滑块,舵机动
3.“循环模式按键”是一个开关样式的按键,用来:“开”或“关”舵机转动的循环模式,即舵机会不会来回的转动!
4.“滑块:实际位置”,该滑块的调节会导致舵机直接移动到指定位置,注意:滑块上会显示实际数值
5.“滑块:循环模式间歇时间”,舵机来回摆动间隔的时间。
Servo myservo;//定义(创建)一个舵机名称为myservo
bool xunhuan_mode = false;//定义布尔值变量 xunhuan_mode
int servo_max,servo_min,ser_num,time_num;
//定义 servo_max 最大位置; servo_min 最小位置; ser_num 实时位置; time_num 循环时间
void button1_callback(const String & state) { //位置1按钮
BLINKER_LOG("get button state: ", servo_max);
myservo.write(servo_max);
//让舵机到达最大位置上去
//最大位置由位置1赋值
Blinker.vibrate();//让手机震动,()中是震动时间,默认500ms
}
void button2_callback(const String & state) { //位置2按钮
BLINKER_LOG("get button state: ", servo_min);
myservo.write(servo_min);
//让舵机到达最小位置上去
//最小位置由位置2赋值
Blinker.vibrate();//让手机震动,()中是震动时间,默认500ms
}
void button3_callback(const String & state) { //位置3按钮 开关模式
// Blinker.vibrate();//如果使用按钮3的震动功能请删除最前的“//”
if(state == "on"){//如果“循环开关”的读值是“开”
xunhuan_mode = true; //布尔值变量xunhuan_mode为“真”
Button3.print("on"); //让“开关模式按钮”变为“开”的状态
Blinker.delay(100);//延迟100ms
}else if (state == "off"){//如果“循环开关”的读值是“关”
xunhuan_mode = false;//布尔值变量xunhuan_mode为“假”
Button3.print("off");//让“开关模式按钮”变为“关”的状态
Blinker.delay(100);//延迟100ms
}
}
void slider1_callback(int32_t value)//滑块“位置1”
{
BLINKER_LOG("get slider value: ", value);
//Blinker日志,读出滑块的数值到value
servo_max = value;//位置1的值赋给舵机的最大位置
Slider1.color("#1E90FF");//设置滑块1的进度条颜色
Slider1.print();//设置滑块1的位置,
}
void slider2_callback(int32_t value)//滑块2
{//与滑块1程序相似
BLINKER_LOG("get slider value: ", value);
servo_min = value;//位置2的值赋给舵机的最小位置
Slider2.color("#FFF8DC");
Slider2.print();
}
void slider3_callback(int32_t value)//滑块3,实际位置
{
BLINKER_LOG("get slider value: ", value);
ser_num = value;//滑块3的值赋给舵机的实际位置
myservo.write(ser_num);//让舵机到达位置3(实际位置)
Blinker.delay(100);
}
void slider4_callback(int32_t value)//滑块4,循环时间
{
time_num = value;//滑块3的值赋给循环时间,在循环函数中使用
Blinker.delay(100);
}
void xunhuan(){//定义void类型的返回值函数"xunhuan"
myservo.write(servo_max);//舵机摆到“位置1”
Blinker.delay(time_num/2);//间隔半个循环时间
myservo.write(servo_min);//舵机摆到“位置2”
Blinker.delay(time_num/2);//间隔半个循环时间,两次即一个循环间隔
}
void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);//以上关于8266芯片的初始化
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Slider1.attach(slider1_callback);
Slider2.attach(slider2_callback);
Slider3.attach(slider3_callback);
Slider4.attach(slider4_callback);//以上关于APP内组件的初始化
myservo.attach(2);//将舵机设置在2引脚
myservo.write(10);//将舵机的初始位置设点给在10
servo_max=70;
servo_min=120;
time_num=500;//以上关于舵机初始最大位置、最小位置、循环时间的设置
}
void loop() {
Blinker.run();//esp8266开始工作啦
if(xunhuan_mode==true)//如果xunhuan_mode变量为真
{
xunhuan();//开始循环功能
}
}
作者QQ:2489055370,
欢迎大神指教与同学的提问(提问这篇的内容或者更简单的可以 [笑哭] )