Как получить тип датчика DHT

dht22

Я сделал простой регулятор температуры на DHT11. Я хочу, чтобы он работал и с DHT22, имея такой же код.

Однако я не могу найти способ узнать, какой тип датчика установлен. Есть ли способ?

, 👍0

Обсуждение

поиск в Интернете показывает, что DHT11 требуется 1 секунда между показаниями ... DHT22 требуется 2 секунды между показаниями .... запустите тесты .... посмотрите, что произойдет, если вы попытаетесь прочитать каждый из датчиков с интервалом в 1,2 секунды., @jsotola


2 ответа


Лучший ответ:

3

Для DHT можно использовать другую библиотеку: https://github.com/markruys/arduino-DHT. Хотя библиотека довольно старая, она отлично работает и имеет функцию автоматического определения.

,

Ничего себе, я попробую эту библиотеку. Спасибо!, @zhekaus


1

Я не думаю, что это возможно.

Что вам нужно сделать, так это передать тип (DHT11 или DHT12) в код, сохранить его и соответствующим образом изменить вычисления (или функции).

Если вы используете класс, вы можете передать его в качестве аргумента конструктора, поэтому пользователю библиотеки нужно настроить его только один раз (в конструкторе, которому он принадлежит). Сделайте это перечислением, скопируйте его в переменную класса, и все методы внутри вашего класса смогут использовать этот тип.

Что-то вроде (не отмечено):

MyDht.hpp:

class MyDht
{
public:
    enum EType { DHT11, DHT12 };

    public MyDht(EType type);

private:
    EType _type;
}

Dht.cpp:

MyDht::MyDht(EType type)
{
    _type = type;
}

И вы создаете класс следующим образом:

MyDht sensor1(MyDht::DHT11);
MyDht sensor2(Mydht::DHT12);
,

На самом деле это возможно. Если тип DHT неправильный, я получаю пустые результаты. Затем я пробую другой тип, и результаты правильные., @zhekaus

Хорошо, тогда используйте свой метод, если вы не знаете, и используйте мой, если хотите сделать это программно... На самом деле, вы можете объединить оба решения, создав (динамически) правильный тип после вашей «однократной проверки», Создайте указатель на MyDht и создайте экземпляр DHT11 или DHT12., @Michel Keijzers