Sonoff_WiFi_switch icon indicating copy to clipboard operation
Sonoff_WiFi_switch copied to clipboard

Неправильно отображает значение температуры и влажности датчика DHT

Open Aldaran opened this issue 6 years ago • 7 comments

Скачками отображает параметры температуры и влажности, то правильное значение, то "2147484000". Привожу пример с влажностью. Использовал напрямую получение значения от датчика "dht.getHumidity()" в строку "String data = graf(getStatusInt(humidityS), 10, t, "low:0");" вместо получения переменной getStatusInt(humidityS), проблема ушла, забыл на некоторое время, но тут решил сделать калибровку датчиков (разброс просто ужасный). В общем все даже заработало =) Пока занимался кодом был один момент, когда использовал изменение типа данных в строке String data = graf((int)(dht.getHumidity()*getOptionsFloat(cHumiS)), 10, t, "low:0"); Тогда увидел эту же проблему. В варианте без перехода на Integer, все хорошо работает.

Aldaran avatar May 11 '18 20:05 Aldaran

Попробуйте getStatus(humidityS), вернет строку.

tretyakovsa avatar May 12 '18 04:05 tretyakovsa

Использую getStatusFloat(humidityS), т.к. getStatus(string ...), а graf(float ...).

Aldaran avatar May 16 '18 11:05 Aldaran

Тоже скачет температура, отображает правильные показания, потом 2147484000, и так каждые две секунды. Менял библиотеки, не помогло.

almaz8811 avatar Apr 24 '20 07:04 almaz8811

@almaz8811 Я тестировал с датчиками DHT 11 двух производителей. AOSONG старый работает. ASAIR новый дает описанный вами эффект. У Вас какой датчик и какие библиотеки вы пробовали?

tretyakovsa avatar Apr 24 '20 08:04 tretyakovsa

@almaz8811 Я тестировал с датчиками DHT 11 двух производителей. AOSONG старый работает. ASAIR новый дает описанный вами эффект. У Вас какой датчик и какие библиотеки вы пробовали?

Скорей всего датчик у меня нового типа. Запрос dht.getMinimumSamplingPeriod() выдает 1 секунду, а по факту новому датчику нужен интервал опроса в 2 секунды. Решил проблему следующим образом:

void initDHT() { uint8_t pin = readArgsInt(); pin = pinTest(pin, HIGH); dht.setup(pin); delay(1000); static uint16_t t = readArgsInt(); static uint16_t test = dht.getMinimumSamplingPeriod() * 2; // TODO: Время опроса датчика умножаю на два, иначе DHT11 показывает не верные значения

Всё заработало нормально. Библиотека https://github.com/markruys/arduino-DHT.

almaz8811 avatar Apr 24 '20 13:04 almaz8811

@almaz8811 Не понял зачем код менять если в файле конфигурации можно написать DHT 2 2000

tretyakovsa avatar Apr 24 '20 16:04 tretyakovsa

@almaz8811 Не понял зачем код менять если в файле конфигурации можно написать DHT 2 2000

не найду в каком конкретно файле редактировать параметр

almaz8811 avatar Apr 25 '20 14:04 almaz8811