Здравствуйте!
Сначала все было нормально!
Работал МК, диод мигал примерно раз в секунду.
Через некоторое время началось.
Диод горит постоянно. Данные в порт (строка 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;
}
}
}
Период примерно 5000 мс.
Триггер устанавливается в единицу раз в секунду (строка 25).
stst увеличивается на единицу раз в секунду (строка 29). когда он равен 5 - устанавливается в единицу флаг start_dht11, который разрешает обратиться к DHT11.
Нет, конечно, проблема не в этом. Просто объявлять эти переменные нужно было в loop(), а не глобально, и вот там как раз и нужен static
А вообще черти чо понаписано, проще заново все написать. Что мешает запускать опрос датчика отдельным таймером? Зачем делать это в полусекундном цикле с отдельным счетчиком, да еще и с делеем? Вы же вроде пытались освоить эту тему