ESP8266 кнопка на прерывании

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Проблема следующего характера:

Цикл loop() имеет непредсказуемое время выполнения ограниченное таймером в 1 минуту, если за 1 минуту не проходит идёт перезагрузка девайса.
Требуется добавить одну кнопку управления, на пин D1.
Напрашивается повесить его на прерывание.
Есть ли возможность программного подавления дребезга кнопки?
 

svm
Offline
Зарегистрирован: 06.11.2016

Ecли нет жестких временных ограничений, то в прерывании и проверять. А чем не устраивает RC цепочка?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

svm пишет:

Ecли нет жестких временных ограничений, то в прерывании и проверять. А чем не устраивает RC цепочка?

так миллис() вроде как в прерывании не работает на ESP8266

Проверил, работает )))
 

void ICACHE_RAM_ATTR test()
{
  uint32_t j=0;
  old_millis = millis();
  while (millis() - old_millis < tau_button){ // тормозимся на дребезг контактов
  j++;
  }
  Serial.print("Прошло циклов - ");
  Serial.println(j);
  
  if (n == 1) {
    k = 1;
    digitalWrite(TFT_LED, HIGH);
    //   Serial.println("on");
    n = 0;
  }
  else {
    n = 1;
    k = 0;
    digitalWrite(TFT_LED, LOW);
    //    Serial.println("off");
  }
}

 

svm
Offline
Зарегистрирован: 06.11.2016

Я с 8266 дело имел всего пару раз, поэтому все его нюансы не знаю. А если просто сотню-другую  раз опросить кнопку и решить нажата она или помеха?