Не работает millis() на ESP-01

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
Оформи код соответствующим тэгом
Не работает данный фрагмент кода на esp-01, плата просто перезагружается, думаю, что это как-то связано именно с millis(), т.к. без этого куска кода все работает.
C++:
while (millis() - my_timer >= period_time) {

    btn.tick();

    if (btn.click()) {

      Disp.clear();

      Disp.print(F("Нажали кнопку"));

      Disp.update();

      delay(5000);

      }

  }
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,364
1,494
Контроллеру нужно каждые 7 секунд или чаще сообщать, что ваша программа ещё не зависла.
 
  • Лойс +1
Реакции: UZER2406

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
@Сотнег, и как это реализовать? Можно как-то программно отключить, я так понимаю, Watchdog?
 

Сотнег

★★★★★★★
15 Янв 2020
4,364
1,494
@UZER2406,
лучше сразу научиться писать код правильно,
исходя из данного ограничения.
 

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
Оформи код соответствующим тэгом
@Сотнег,
C++:
Timer tmr(2000);

  while (!tmr.period()) {



    btn.tick();

    if (btn.click()) localPortal(ip); // клик - запускаем портал

    // дальше код не пойдёт, уйдем в перезагрузку

  }
Код для лампы из последнего видео, который писал Алекс, он тоже не работает. Его как будто пропускают.
 
Изменено:

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
Оформи код соответствующим тэгом
@Сотнег,
C++:
Timer tmr(20000);

  while (!tmr.period()){

    loadAnimation(CRGB::Green);

    btn.tick();

    if (btn.click()){

      Disp.print(F("Вы нажали на кнопку"));

  Disp.update();

  delay(5000);

  Disp.clear();

  Disp.home();

      }

  }
Вот этот кусок кода как будто пропускают, как если бы таймер не был установлен
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,364
1,494
@UZER2406,
Я имел в виду, что не работает в коде Алекса?

А у вас 20 секунд ожидания при ограничении в 7-8.
 

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
@Сотнег,при коде, в посте №7 плата не перезагружается. Проблема в том, что таймер не работает. Можно поставить значение и 1000 и от также не будет заходить в while
 

Сотнег

★★★★★★★
15 Янв 2020
4,364
1,494
@UZER2406,
у Алекса работает.
Думаю, вы этот кусок кода куда-то не в то место вставляете.
 
  • Лойс +1
Реакции: UZER2406

UZER2406

✩✩✩✩✩✩✩
6 Мар 2022
10
1
@Сотнег, разобрался в чем причина. Перезагружалась, потому что ее дергать надо во время цикла, как вы и сказали. А не заходило в цикл, потому что в файле Timer.h из прошивки лампы не хватало во время объявления таймера установки начального значения переменной tmr. Не знаю, как это у Алекса работало, может я действительно что-то не так делаю. Но если у кого-то, кто будет делать эту лампу не заходит в 2 секундный режим ожидания нажатия кнопки, то добавьте строчку, выделенную жирным в файл Timer.h
Timer (uint32_t nprd, bool nstate = true) {
state = nstate;
setPeriod(nprd);
tmr = millis();
}

updete: У Алекса оно работало, потому что с момента запуска программы, до вызова таймера проходило меньше 2 секунд, а у меня больше. Так что если кто-то будет использовать этот таймер в своих делах, строчка понадобится.

А чтобы не висло, Алекс вставлял yield(); Аналог delay(0); так мы даем понять, что не зависли.
 
  • Лойс +1
Реакции: Сотнег