Esp8266番外篇,感谢“暴改车间主任”

Esp8266控制小舵机感谢篇

L3 Esp8266控制9g小舵机

P1 写在前面

在我查找esp8266相关的资料的同时在抖音上看到了一位大神制作的esp8266控制舵机的小视频,虽然是在疫情期间的无聊产物,但是对于我的8266的学习提供了很好的帮助,注:上一篇文章《ESP8266从零学起第二课控制9g小舵机》,中的代码就是由 暴改车间主任 发布在github的代码案例改编的。
感兴趣的同学们,想看更多有趣视频可以搜索主任的作品
 抖音:暴改车间主任 ,抖音号:BAOGAICHEJIAN

P2 完整代码(未详细注释)

#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();
  }
    
}

P3 Esp8266控制9g小舵机(分段注释)

第一段:准备工作
#include  //引入舵机的库
#define BLINKER_WIFI//预定义Blinker WIFI函数
#include //引入Blinker库
 
char auth[] = "我是来自blinker的密钥";
char ssid[] = "HUAWEI nova 21";
char pswd[] = "我是密码";
//关于准备部分已经详细介绍过了,如果有疑问可以移步第一课,感谢
第二段:APP上的组件创建
// 新建组件对象
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");  // 滑块 数据键名:“循环模式间隔时间”   单位毫秒
这个过程需要在APP上新建以上7个组件, 请耐心安装。 看详细安装方式可以移步我的《第一课》《第二课》。

 这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();//开始循环功能
  }
    
}

P4 感谢

再次感谢暴改车间主任的分享,不知方式是否正确充分,如有冒犯请见谅。

作者QQ:2489055370,
欢迎大神指教与同学的提问(提问这篇的内容或者更简单的可以 [笑哭] )

你可能感兴趣的:(Esp8266番外篇,感谢“暴改车间主任”)