Я эту тему прочитал от корки до корки. Только я сразу там не увидел, что у Вас в первом примере static написан в loop. Сейчас пересмотрел - понял.
Где можно прочесть - как это сделать?
Я эту тему прочитал от корки до корки. Только я сразу там не увидел, что у Вас в первом примере static написан в loop. Сейчас пересмотрел - понял.
Где можно прочесть - как это сделать?
Мне, честно скажу - лень разбираться что там и к чему в этой библиотеке (я её и не ставил даже).
Но (примерно), должно быть что-то такое:
include <DHT_NEW.h>
#define ledPin 13
#define dhtPin 7
#define ststNum 10
bool trigger;
DHT dht;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, 0);
dht.setup(dhtPin);
Serial.begin(9600);
}
void loop() {
static uint8_t stst;
static uint32_t period = 500;
static uint32_t moment;
float humidity, cur_t;
if (millis() - moment >= period) {
moment = millis();
trigger = !trigger;
digitalWrite(ledPin, trigger);
stst++;
}
if ( stst == ststNum ) { //запуск DHT11
stst = 0;
humidity = dht.getHumidity();
}
if (!isnan(humidity)) { //если DHT11 выдал не NAN, а нормальное число
cur_t = humidity;
}
}
Если не заработает - значит MinimumSamplingPeriod
более 5 секунд (что странно), но попробуй тогда изменить ststNum на 20 (или 30)…
Вот пример из библиотеки #20.
#include "DHT_NEW.h"
DHT dht;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
dht.setup(2); // data pin 2
}
void loop()
{
delay(dht.getMinimumSamplingPeriod());
float humidity = dht.getHumidity();
float temperature = dht.getTemperature();
Serial.print(dht.getStatusString());
Serial.print("\t");
Serial.print(humidity, 1);
Serial.print("\t\t");
Serial.print(temperature, 1);
Serial.print("\t\t");
Serial.println(dht.toFahrenheit(temperature), 1);
}
Там delay в строке 16.
Из #22 код пробовал?
В той самой теме. Похоже, прочитать вы ее прочитали, но понять так и не смогли ))
Только что добрался до него . Пробую.
По идеи код не сложный, должно и как я написал в #22 работать. Наврятли период опроса более 5 секунд у dht11…
ЗЫ: Вроде бы минимальный опрос равен 1 секунде. Так что 5 секунд нормально.
Да. Так и есть. Просто меня устраивает и 5 секунд. И вот в моем скетче на 5-ой секунде задержка. А Ваш вроде бы работает.
Вроде? Или работает?
В данный момент работает.
delay()
в библиотечных примерах сидят не потому, что так и только так нужно работать с библиотекой, а потому, что так проще делать задержки. Потому что это - ПРИМЕР ))
Задача выполнена? )
Понял что я сделал или нет? Я «съел слона по частям»…
ЗЫ: Не забудь #22 «отметить» ))
Да. Особетнно когда delay() с таким параметром вызывается dht.getMinimumSamplingPeriod()
delay(dht.getMinimumSamplingPeriod())
А читать ты умеешь? В библиотеке просто «вшито» минимальное число миллисекунд на опрос, которое возвращается этой функцией. И всего то.
Это вот, кстати, о пользе правильного именования функций и переменных. Называлась бы она как-нибудь sspts() - фик бы я понял сразу что она делает… )))
#22 я отметил, толко почему была проблема, описанная в #1, и возникнет она снова - поживем-увидим.
Если коротко - Потому.))
С кодом из #22 ничего «такого» не будет.
И что там страшного? delay()
принимает аргументом число, метод getMinimumSamplingPeriod()
возвращает число. В чем проблема?
Я уже писал ему в #34…
Выходит, что ни delay(), ни этот аргумент там и на фиг не нужны.
Они нужны, по большому счету, для того чтобы продемонстрировать работу. Никто в здравом уме delay() не использует (с такими интервалами) в готовом устройстве…