实现不堵塞延迟函数
millis()函数可以获取ESP8266从开始运行到现在的毫秒数, 最长42天, 如果超过则从0开始, 可以放心使用
定时全局变量interval在任意地方修改此变量都可以执行延迟方法, 单位是毫秒
此方法主要用于精确控制开关设备时间, 例如电磁阀, 水泵, 继电器等;
相较于delay()函数的优点是不会堵塞主线程
unsigned long interval = 0; // 用于实现不堵塞延迟执行
unsigned long stopTime = 0; // 用于存储临时停止时间
const int D5_PIN = 14; // D5针脚对应的数字编号
void setup() {
pinMode(D5_PIN, OUTPUT); // 将D5针脚配置为输出模式
}
void loop() {
outWater(); // 执行灌溉操作
}
// 执行灌溉操作
void outWater() {
if (interval == 0) return;
// unsigned long currentMillis = millis(); // 获取当前时间
if (stopTime == 0) {
stopTime = millis() + interval; // 获取停止时间
}
if (millis() < stopTime) {
digitalWrite(D5_PIN, HIGH); // 开始
} else if (millis() >= stopTime) {
digitalWrite(D5_PIN, LOW); // 停止
interval = 0;
stopTime = 0;
}
}
此代码能实现精确控制D5口的开关时间, 此代码根据ESP8266开发板进行开发, 其他开发板或芯片代码实现可能有所不同