Arduino UNO разбушевалась

Здравствуйте!
Сначала все было нормально!
Работал МК, диод мигал примерно раз в секунду.
Через некоторое время началось.
Диод горит постоянно. Данные в порт (строка 30) выводятся в порт с космической скоростью.
Помогает только сброс.
Похоже, что портится переменная period (строка 4).
Или еще что-то.
В чем может быть дело?
Спасибо.

Спойлер
#include <DHT_NEW.h>
unsigned long dhtReadings = 0;
unsigned long dhtErrors = 0;
static uint32_t period = 500;
static uint32_t moment;
bool trigger;
byte stst;
bool start_dht11;

DHT dht;

void setup()
{
  pinMode(13, OUTPUT);
  digitalWrite(13, 0);
  dht.setup(7);
  Serial.begin(9600);
}

void loop()
{
  if (millis() - moment >= period)
  {
    moment = millis();
    trigger = !trigger;
    digitalWrite(13, trigger);
    if (trigger)
    {
      stst++;
      Serial.println(stst);
     if (stst == 5)
      {
        start_dht11 = true;
        stst = 0;
      }
    }

    if ((start_dht11)) //запуск DHT11
    {
      delay(dht.getMinimumSamplingPeriod());
      float humidity = dht.getHumidity();
      if (!isnan(humidity)) //если DHT11 выдал не NAN, а нормальное число
      {
        float cur_t = humidity;
      }
      start_dht11 = false;
    }
  }
}

А нано? Нано тоже «бушует»?

У меня нет нано. Не пойму - что здесь не так. Все - таки думаю на DHT11.

А что с 27 по 36 (по твоему мнению) происходит? Хочется понять твою логику… Ну и/или потом опиши что ты этим вообще хочешь получить в итоге.

Зачем в 40 delay()?

Примерно раз в пять секунд опрашивается датчик DHT11. В строке 44 получаю влажность. В дальенйшем планирую выводить ее на дисплей.

Может быть потому, что я температуру с этого датчика не запрашиваю?

В примере так написано.

  1. 5 секунд = 5000 мс
  2. Я там такого не вижу.
  3. Опрос идет в 41 строке, причем с использованием delay()

Переписывай, код не верный.

1 лайк

Значит пример плохой…

Зачем здесь static?

В глобальных он смысла не имеет, но и вроде бы не мешает.

Период примерно 5000 мс.
Триггер устанавливается в единицу раз в секунду (строка 25).
stst увеличивается на единицу раз в секунду (строка 29). когда он равен 5 - устанавливается в единицу флаг start_dht11, который разрешает обратиться к DHT11.

В которой используется delay()….

Я полагаю, что @Optron по обыкновению нифига не понял, когда ему сказали, что эти переменные нужно объявлять статическими в loop() ))

3 лайка

Почему ссылки на библиотеку не предоставлено?

Сейчас уберу. Но решит ли это проблему.

Одолжение решил сделать? ))

У меня нет на нее ссылки. Но уменя есть ее ZIP-файл, с которого я ее устанавливал. Как его передать сюда? Через YandexDisk пойдет?

Нет. Прислушаться к совету решил.

Нет, конечно, проблема не в этом. Просто объявлять эти переменные нужно было в loop(), а не глобально, и вот там как раз и нужен static

А вообще черти чо понаписано, проще заново все написать. Что мешает запускать опрос датчика отдельным таймером? Зачем делать это в полусекундном цикле с отдельным счетчиком, да еще и с делеем? Вы же вроде пытались освоить эту тему

Не осилили?

DHT_NEW.ZIP