Датчик температуры и влажности DHT11 Код
У меня есть вопрос об этом коде, который я приложил, пожалуйста, правильно ли читать его так:
После определения переменной температуры и влажности и присвоения Measurement_timestamp функции millis() цикл if сначала проверяет, соответствует ли значение millis - Measurement_timestamp < 3000 unsigned long (что для меня не имеет смысла), а затем, если чтение прочитано, оно = true?
Это правильно?
Код:
static bool measure_environment( float *temperature, float *humidity )
{
static unsigned long measurement_timestamp = millis( );
/* Measure once every four seconds. */
if( millis( ) - measurement_timestamp > 3000ul )
{
if( dht_sensor.measure( temperature, humidity ) == true )
{
measurement_timestamp = millis( );
return( true );
}
}
return( false );
}
@Tom, 👍1
Обсуждение1 ответ
Лучший ответ:
Мне этот код понятен.
Комментарий "/* Измерять один раз каждые четыре секунды. */" неточно. Он будет измерять, когда время, прошедшее с момента последнего измерения, превышает 3 секунды.
Из-за "static unsigned long Measurement_timestamp = millis());", Measurement_timestamp НЕ будет инициализироваться значением millis() при каждом вызове функции – он будет инициализирован только один раз за все время выполнения. В противном случае это никогда не приведет к измерению, поскольку "if(millis() - Measurement_timestamp > 3000ul)" никогда не будет правдой.
Первый вызов задает для Measurement_timestamp= значение millis() [текущее значение таймера], и функция возвращает значение "false"
При вызове через 3,001 сек. "if(millis() - Measurement_timestamp > 3000ul)" true - измерение выполнено, "measurement_timestamp" обновляется до текущего значения millis(), и функция возвращает значение "true".
Возвращает "false" в течение следующих 3 секунд, а затем "true" и так далее.
см. https://stackoverflow.com/questions/5033627/ статическая-переменная-внутри-функции-в-c
и Как обработать ролловер millis()?
Надеюсь, это поможет.
Привет, спасибо, что прояснил ситуацию - значит, я был неправ. Подскажите, пожалуйста, что означает 3000 мкл?, @Tom
@Tom 3000ul - это буквальная константа, и у них есть типы переменных, как и у других переменных. В этом случае константа 3000 обозначается как тип unsigned long [ul], как это уместно, см. https://cplusplus.com/doc/tutorial/constants/ Проще говоря, millis() измеряет в миллисекундах и разница между последней меткой времени и текущим счетчиком millis() составляет> 3000 миллисекунд (3 секунды), идите и делайте свое дело :), @DrG
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Когда я включаю сервопривод, он вращается сам по себе, прежде чем перейти в нужное положение и начать скетч.
- Новый код приводит к звуковому шуму
- Симулятор стоп-сигнала - белый светодиод не включается при нажатии кнопки
- Проблема с датчиком температуры и влажности DHT11
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Объяснение кода MPU6050
- BMP280 возвращает 0
Пожалуйста, отправьте код в виде текста, а не в виде изображения (и, конечно, не в виде скриншота, сделанного с помощью мобильного телефона), @PMF
Приносим извинения, думал, что изображения были приемлемы на сайте, @Tom
код в изображении не может быть скопирован и протестирован ... также некоторые люди здесь не могут просматривать изображения, @jsotola
Это имеет смысл, извините, @Tom