设置执行时间,点击启动,开始倒计时,倒计时结束,自动终止运行(通电),关闭设备(断电)。
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = "*******";
char ssid[] = "*******";
char pswd[] = "*******";
// 新建组件对象
BlinkerButton Button1("btn1");
BlinkerButton Button2("btn2");
BlinkerNumber Number1("num1");
BlinkerText Text1("tex1");
BlinkerText Text2("tex2");
BlinkerText Text3("tex3");
BlinkerText Text4("tex4");
BlinkerText Text5("tex5");
BlinkerSlider Slider1("ran1");
BlinkerNumber Number_1("num1");
int counter = 0;
int ran=20;
int start_time=0;
int end_time=0;
int countDown=0;
bool run_state =false;
bool btn_state =true;
bool btn_end =false;
bool ran_state =true;
// 按下按键即会执行该函数
void button1_callback(const String & state) {
if(btn_state){
BLINKER_LOG("get button state: ", state);
Button1.color("#6a5ae2");
Button1.text("运行中");
Button1.print();
Button2.color("#eee");
Button2.text("终止");
Button2.print();
Blinker.vibrate(255);
run_state=true;
btn_state=false;
btn_end=true;
ran_state=false;
start_time=millis();
Text1.print(start_time);
digitalWrite(0,LOW);
BLINKER_LOG("get button state:on", state);
Blinker.vibrate(255);
}
}
void onTimer()
{
end_time=(ran+3) *1000 + start_time;
// Text1.print( ceil((millis()-start_time)/1000));
if(run_state){
if(ceil((millis()-start_time)/1000)<=ran){
countDown=ceil(ran- ceil((millis()-start_time)/1000));
Text2.print(countDown);
Number1.print(countDown-1);
}else{
Text2.print(0);
Number1.print(0);
}
}
if( end_time < millis() && run_state){
counter++;
Button1.color("#eee");
Button1.text("运行");
Button1.print();
Button2.color("#6a5ae2");
Button2.text("终止");
Button2.print();
run_state=false;
btn_state=true;
btn_end=false;
ran_state=true;
digitalWrite(0,HIGH);
Blinker.vibrate(255);
}
Text3.print(run_state);
Blinker.print("counter", start_time);
Text4.print(btn_end);
Text5.print(btn_state);
Blinker.print("counter", end_time);
}
void button2_callback(const String & state) {
if(btn_end){
BLINKER_LOG("get button state: ", state);
Button2.color("#6a5ae2");
Button2.text("终止");
Button2.print();
Button1.color("#eee");
Button1.text("运行");
Button1.print();
run_state=false;
btn_state=true;
btn_end=false;
ran_state=true;
digitalWrite(0,HIGH);
Text2.print(0);
Number1.print(0);
BLINKER_LOG("get button state:off", state);
Blinker.vibrate(255);
}
// digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void slider1_callback(int32_t value)
{
if(ran_state){
BLINKER_LOG("get slider value: ", value);
ran = value;
Blinker.vibrate(255);
Slider1.print(value);
}else{
Slider1.print(ran);
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Blinker.print("counter", counter);
Number1.print(counter);
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
// 初始化有LED的IO
pinMode(0, OUTPUT); //定义io口为输出
digitalWrite(0, HIGH); //定义io默认为高电平
// pinMode(LED_BUILTIN, OUTPUT);
// digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Slider1.attach(slider1_callback);
}
void loop() {
Blinker.run();
onTimer();
}
唉没有引用定时器的库,MsTimer2 不知道为啥有问题,只能在loop里简易实现倒计时功能了
Arduino 在这里下载 www.arduino.cn/thread-5838… 不要用2.0版本
文件》首选项》附加开发板管理器网址 填这个arduino.esp8266.com/stable/pack…
安装blinker Arduino库 diandeng.tech/sdk/blinker… Windows:将下载好的blinker库解压到 我的电脑>文档>Arduino>libraries 文件夹中
开发板里安装esp8266
数据那个组件还与延迟。。。。
我浅薄的c的基础啊,实现功能就好,管它代码优雅不优雅。