#1 Програмування Arduino » Затримка millis() не працює, esp8266 » 2023-03-20 12:20:25

bushmanov
відповідей: 2

У мене є:

  • esp8266

  • Матриця MAX7219

  • Бібла GyverMAX7219.h


Так само є функція виведення часу та температури з інтернету (щось типу розумного годинника) і у функції виведення температури має бути затримка, delay() на подив працює нормально, але його використовувати не можна. Залишається тільки millis(), але в умовній конструкції таке відчуття, що таймер не спрацьовує, а в конструкції циклу while, таймер спрацьовує, температуру виводить, але по закінченню esp8266 ресетається. Подібне зустрічав раніше коли хотів зробити миготливу двокрапку, але там двокрапка за часом таймера спочатку не світить (так і має бути), блимає і моментально зникає. Я думаю, що тут один спільний косяк. Допоможіть будь ласка! p.s Якщо потрібний весь код, скажіть, надам.

#define INTERNET_WEATHER_TIME 10000
void outInfo(bool time, bool tempInternet)
{
  if(time)
  {
    internetTime();
  }
  if (tempInternet)
  {
    const unsigned long interval = INTERNET_WEATHER_TIME;
    static unsigned long previousMillis = 0;
    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval)
    {
      previousMillis = currentMillis;
      internetTemperature();
      //тут всё ок
    }
  }
  
}

void internetTime()
{
  matrix.clear();
  matrix.setCursor(3, 1);
  matrix.print(String(hours < 10 ? "0" : "") + hours);
  matrix.setCursor(14, 1);
  matrix.print(":");
  matrix.setCursor(18, 1);
  matrix.print(String(minutes < 10 ? "0" : "") + minutes);
  matrix.update();
}

void internetTemperature()
{

  matrix.clear();
  matrix.setCursor(10, 1);
  matrix.print(temperature);
  matrix.setCursor(16, 1);
  matrix.print("C");
  matrix.update();
  const unsigned long interval = 5000;
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    //тут проблема
  }
}

Підвал форуму