Ciao, sono molto alle basi di C++ anche se programmo in altri linguaggi.
Sto cercando di strutturare il mio progetto in librerie, e sto avendo una difficolta.
Nel mio progetto ho un relay che si apre o si chiude in base alla temperatura rilevata da un DHT11.
Vorrei dividere logicamente questa parte dal resto.
Sto usando la libreria DHT_Unified.
Lo sketch senza librerie funziona, istanzio cosi:
// pin di connessione segnale sensore
#define DHTPIN 7
// tipo di sensore
#define DHTTYPE DHT11
DHT_Unified dht(DHTPIN, DHTTYPE);
Ora vorrei fare questa cosa in una libreria, che istanzio passando il pin di connessione.
Vi posto direttmanete il codice non funzionante, che spero vi faccia capire quel che voglio fare.
#include "Arduino.h"
#include <DHT.h>
#include <DHT_U.h>
#ifndef HumidityRelay_h
#define HumidityRelay_h
class HumidityRelay
{
public:
UmidityCO2Relay(uint8_t pinDHT, uint8_t pinRelay);
void setUp();
private:
int _pinDHT;
int _pinRelay;
DHT dht;
};
#endif
#include "Arduino.h"
#include "HumidityRelay.h"
#include <DHT.h>
#include <DHT_U.h>
HumidityRelay::HumidityRelay(uint8_t pinDHT, uint8_t pinRelay)
{
_pinRelay = pinRelay;
_pinDHT = pinDHT;
}
void HumidityRelay::setUp() {
dht(_pinDHT, DHT11, 6);
}
Rispetto ad altre librerie che ho scritto ho difficoltà a dire che la mia variabile privata è di tipo DHT e poi di istanziarla in un secondo momento.
Ho fatto diverse prove, mettendo nel file .h il tipo degli argomenti, ad usare DHT_Unified ecc, ma ogni volta ho errori di compilazione.
L'errore è di questo genere:
lib/HumidityRelay/src/HumidityRelay.cpp: In constructor 'HumidityRelay::HumidityRelay(uint8_t, int)':
lib/HumidityRelay/src/HumidityRelay.cpp:7:62: error: no matching function for call to 'DHT::DHT()'
Quello che mi sembra di capire è che siccome trova come tipo DHT nel costruttore in automatico cerca di chiamarlo senza argomenti, ma è solo un'ipotesi buttata li così, non riesco proprio a capire quale dovrebbe essere la giusta sintassi.
Avete suggerimenti?