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);
}
}
@user56171, 👍0
Обсуждение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;
}
}
,
@Jaromanda X
Смотрите также:
- Отправка данных из ESP8266 в PHP
- Какие входные контакты я могу использовать на ESP8266 NodeMCU
- Скетч мигания ESP8266 не мигает светодиодом
- ESP8266 не может подключиться к брокеру MQTT
- Однонаправленная связь между NodeMCU и Arduino выплевывает мусор
- Wemos D1 не работает с MH-Z19B (датчик CO2)
- Как программно получить ответ на выданную AT-команду для ES266 на Arduino?
- Ошибка программного сброса wdt на NodeMCU (ESP8266)
loop2()
— это не цикл, это подпрограмма или функция... почему бы вам не дать ему описательное имя, напримерupdateD0()
?, @jsotola