#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()
fromDHT22.readTemperature()
.4. @hcheung Я могу сохранить состояние DHT22. В одном простом примере я могу создать отдельные методы для получения температуры в градусах Цельсия или Фаренгейта