Buongiorno a tutti e...buona Vigilia!
Sto sperimentando le classi con Arduino e fino a oggi qualcosa sono riuscito a fare. Il motivo probabilmente è stato che non facevo uso di altri riferimenti (p.es. altre librerie di terze parti), o puntatori, ecc. E' molto probabile che mi stia incartando sugli include "multipli" (librerie richiamate nello sketch, nell'header e nel cpp).
Scopo della classe è gestire un oggetto sonda temperatura, assegnando - tra gli altri - un parametro definito come DallasTemperature, già dichiarato a livello di skecth e passato alla classe. In realtà il mio progetto didattico è più ambizioso: definire un generico oggetto "sensore temperatura" che risponda con l'ultima lettura disponibile, sia nel caso di LM35, DS18B20, DHT, definiti tramite un enum ecc. A seconda del tipo assegnato, il calcolo della temperatura e i tempi di conversione saranno gestiti dalla classe e all'utente spetta solo il compito di un generico check ad ogni loop.
Riporto una breve definizione della classe (ho lasciato solo quello che mi crea problemi):
header:
#ifndef probestest_H
#define probestest_H
#include <WString.h>
#include <OneWire.h>
#include <DallasTemperature.h>
class probestest
{
public:
probestest();
~probestest();
void SetDT(DallasTemperature &dst);
DallasTemperature GetDT();
private:
DallasTemperature _DT;
};
#endif
class:
#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "probestest.h"
//#include <String.h>
probestest::probestest()
{
}
probestest::~probestest()
{
}
void probestest::SetDT(DallasTemperature &dst)
{
_DT = dst;
}
DallasTemperature probestest::GetDT()
{
return _DT;
}
Lo sketch di prova:
#include <OneWire.h>
#include <DallasTemperature.h>
#include "probestest.h" //<----------linea che scatena gli errori. Se commentata, compila senza errori
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire ds(0);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&ds);
//////////probestest tCam();
void setup()
{
}
void loop()
{
}
Gli errori:
****\Google Drive\Arduino\libraries\ProbesTest\probestest.cpp: In constructor 'probestest::probestest()':
****\Google Drive\Arduino\libraries\ProbesTest\probestest.cpp:8: error: no matching function for call to 'DallasTemperature::DallasTemperature()'
***\Google Drive\Arduino\libraries\DallasTemperature/DallasTemperature.h:64: note: candidates are: DallasTemperature::DallasTemperature(OneWire)
****\Google Drive\Arduino\libraries\DallasTemperature/DallasTemperature.h:61: note: DallasTemperature::DallasTemperature(const DallasTemperature&)
Gli errori compaiono solo se lascio decommentata la riga #include "probestest.h", quindi il problema proviene certamente dalla mia classe e, nello specifico, nel fatto che faccio uso della libreria DallasTemperature.
Non riesco a ridurre questi errori.
Grazie
A.