Как внедрить объект или создать новый в оболочку класса для датчика, например DHT22?

#arduino

#arduino

Вопрос:

Я хочу создать класс, который выполняет настройку инициализации и управляет датчиком, вызывающим мой класс. Я создал один для Wi-Fi, и он работает хорошо

 class WifiClient {
  
  private:
    String ssid;
    String password;

  public:
    WifiClient(String ssid, String password) {
      this->ssid = ssid;
      this->password = password;
    }

    void connect() {
      WiFi.mode(WIFI_STA);
      WiFi.begin(this->ssid, this->password);

    }

    boolean is_connected() {
      if (WiFi.status() == WL_CONNECTED)
        return true;
      return false;
    }
};
 

Но я не могу создать то же самое для DHT22.

 class DHT22CLient {
  
  private:
    DHT sensor;

  public:
    DHT22CLient(uint8_t pin) {
      this->sensor(pin, DHT22);
    }

    void start() {
      this->sensor.begin();
    }

    float getTemperature() {
      return this->sensor.readTemperature()
    }
};
 

У меня есть исключение

 dht22_client.h:11:30: error: no match for call to '(DHT) (uint8_tamp;, int)'
       this->sensor(pin, DHT22);
                              ^
exit status 1
no matching function for call to 'DHT::DHT()'
 

Я неправильно ввожу зависимость?

Комментарии:

1. Это не то, как внедрение зависимостей работает в C , и ваш код также не имеет ничего общего с внедрением зависимостей. DHT22 определен в другом классе / библиотеке, вы используете его, не наследовая и не включая его.

2. @hcheung Я уже тестировал DHT22, это довольно просто. Однако я хочу создать некоторый абстрактный слой между моим кодом и сторонними библиотеками.

3. Еще одна проблема — чрезмерная абстракция. Библиотека DHT22 уже предоставляет абстракцию, необходимую для нижеприведенного кода, ваш дополнительный уровень абстракции не добавляет к этому никакого значения, в чем разница между вашим myClient.getTemperature() from DHT22.readTemperature() .

4. @hcheung Я могу сохранить состояние DHT22. В одном простом примере я могу создать отдельные методы для получения температуры в градусах Цельсия или Фаренгейта