nodeMCU — 2 цикла одновременно — один непрерывно, второй каждые 10 секунд.

У меня nodeMCU v3(esp8266), поэтому мне нужно сделать 2 проверки 1 проверка — это контакт D1, который необходимо выполнять постоянно, а другая проверка — проверка веб-ссылки каждые 10 секунд. проблема в том, что когда я ставлю задержку, первая проверка останавливается

void loop() {

 if (digitalRead(pinD1)==1){
       digitalWrite(pinD0, HIGH);
       delay(20000);  
 }else{
       digitalWrite(pinD0, LOW);
 }

      loop2();  

}



void loop2(){
   if (json1=="ON"){
    digitalWrite(pinD0, HIGH);
      delay(20000);  
}else{
     digitalWrite(pinD0, LOW);
               delay(10000);  

  }
}

, 👍0

Обсуждение

loop2() — это не цикл, это подпрограмма или функция... почему бы вам не дать ему описательное имя, например updateD0()?, @jsotola


1 ответ


1

Вместо использования delay используйте millis() и переменную, чтобы проверить, истекло ли некоторое время

void loop()
{
    static int check = 0;
    int now = millis();
    if (now >= check) {
        if (digitalRead(pinD1)==1){
            digitalWrite(pinD0, HIGH);
            check = now + 20000;  
        } else {
            digitalWrite(pinD0, LOW);
            check = now;
        }
    }
    loop2();  
}

void loop2()
{
    static int check = 0;
    int now = millis();
    if (now >= check) {
        if (json1=="ON"){
            digitalWrite(pinD0, HIGH);
        } else {
            digitalWrite(pinD0, LOW);
        }
        check = now + 20000;
    }
}
,