#1 2023-03-20 12:20:25

bushmanov
Учасник
Зареєстрований: 2023-02-20
Повідомлень: 2

Затримка millis() не працює, esp8266

У мене є:

  • 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;
    //тут проблема
  }
}

Неактивний

#2 2023-03-21 02:11:48

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 414

Re: Затримка millis() не працює, esp8266

Якщо internetTemperature() більше ніде в коді не викликається, то при даних значеннях interval-ів блок if в internetTemperature() буде виконуватись завжди (тобто якби там був блок else, то він би ніколи не виконувався). Поясніть мету цього if в internetTemperature().

Неактивний

#3 2023-04-29 10:40:20

Кирило
Гість

Re: Затримка millis() не працює, esp8266

Всім привіт! Підкажіть будь ласка, як зробити декілька лічильників паралельно, при цьому кожен лічильник має різні проміжки часу за допомогою millis().

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

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