首页 > 解决方案 > Arduino UNO 解决多个重叠的计时器循环

问题描述

我一直在写两个重叠的循环来切换泵继电器。如果定时器“delayPump”结束(LOW),定时器“runnningPump”(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;
      }
    }
}

标签: c++arduino-uno

解决方案


我认为这是你需要的:

您只需要一个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();
    }
  }
}

推荐阅读