Ardunio UNO解决了多个重叠的定时器循环

Ardunio UNO solve multiple overlapping timer loops

本文关键字:重叠 定时器 循环 UNO 解决 Ardunio      更新时间:2023-10-16

我一直在写两个重叠的循环来切换泵继电器。如果计时器";delayPump";结束(LOW(计时器";runningPump";(HIGH(应启动。

我想有些数学疯狂,说实话,这个循环已经让我疯了,因为它应该很容易!!!!

有线索吗??

#define pumpSwitch_1 8
int delayPump = 10000; //delay time
int runnningPump = 5000; // running Timer
bool pumpState = LOW; 
unsigned long TimerPump = 0;
unsigned long TimerDelay = 0;
void setup() {
pinMode(pumpSwitch_1, OUTPUT);
digitalWrite(pumpSwitch_1, LOW);
TimerPump = millis();
TimerDelay = millis(); 
}
void loop() {
digitalWrite(pumpSwitch_1, pumpState);
if (pumpState == HIGH){
if((millis() - TimerPump) >= runnningPump){
pumpState = LOW;
TimerPump = millis() + delayPump;
}
}else {
if((millis() - TimerDelay) >= delayPump){
pumpState = HIGH;
TimerDelay = millis() + runnningPump;
}
}
}

我认为这就是您所需要的:

您只需要一个Timer变量,每次切换状态时,都将其设置为当前时间,即millis()

#define pumpSwitch_1 8
int delayPump = 10000; //delay time
int runnningPump = 5000; // running Timer
bool pumpState = LOW; 
unsigned long Timer = 0;
void setup() {
pinMode(pumpSwitch_1, OUTPUT);
digitalWrite(pumpSwitch_1, LOW);
Timer = millis();
}
void loop() {
digitalWrite(pumpSwitch_1, pumpState);
if (pumpState == HIGH) {
if ((millis() - Timer) >= runnningPump) {
pumpState = LOW;
Timer = millis();
}
} else {
if ((millis() - Timer) >= delayPump) {
pumpState = HIGH;
Timer = millis();
}
}
}