Ho trovato una libreria DallasTemperature che da come ho capito mi serve per poter utilizzare il seguente codice:
// Includiamo la libreria OneWire e la DallasTemperature
#include <OneWire.h>;
#include <DallasTemperature.h>;
// Usiamo il PIN 2 per connettere il bus 1-Wire
#define ONE_WIRE_BUS 2
// Impostiamo la precisione della conversione a 9-bit
#define TEMPERATURE_PRECISION 9
// Impostiamo la libreria per comunicare sul PIN desiderato
OneWire oneWire(ONE_WIRE_BUS);
// Passiamo il riferimento del bus 1-Wire alla libreria Dallas
DallasTemperature sensors(&oneWire);
// vettore per contenere gli indirizzi delle noste sonde
DeviceAddress Sonda1, Sonda2;
void setup(void)
{
// avvia la seriale
Serial.begin(9600);
Serial.println("Lettura Sensori DS18B20 su unico bus 1-Wire");
// avvia la libreria
sensors.begin();
// Localizza i dispositivi sul bus
Serial.print("Localizza il numero dei dispositivi sul bus...");
Serial.print("Trovati ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" Dispositivi.");
// risponde alla richiesta dell'alimentazione passiva
Serial.print("Alimentazione Passiva: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
// Assegna l'indirizzo delle sonde manualmente se lo si conosce già.
// Comunque è possibile scoprire l'indirizzo delle sonde utilizzando il
// metodo oneWire.search(indirizzo del dispositivo) oppure
// sensors.getAddress(indirizzo dispositivio, indice)
Sonda1 = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
Sonda2 = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };
// Cerca i dispositivi sul bus e assegnazione attraverso l'indice.
// Questo è il metodo preferibile per identificare gli indirizzi delle
// sonde sul bus ed assegnarli poi ad un indice e successivamente assegnarli
// manualmente con l'indirizzo sopra specificato una volta identificato.
if (!sensors.getAddress(Sonda1, 0)) Serial.println("impossibile trovare l'indirizzo per il dispositivo 0");
if (!sensors.getAddress(Sonda2, 1)) Serial.println("impossibile trovare l'indirizzo per il dispositivo 1");
// Visualizza gli indirizzi trovati
Serial.print("Indirizzo dispositivo 0: ");
printAddress(Sonda1);
Serial.println();
Serial.print("Indirizzo dispositivo 1: ");
printAddress(Sonda2);
Serial.println();
// imposta la risoluzione per la conversione
sensors.setResolution(Sonda1, TEMPERATURE_PRECISION);
sensors.setResolution(Sonda2, TEMPERATURE_PRECISION);
}
// Funzione per stampare l'indirizzo delle sonde
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
// Funzione per stampare la temperatura
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
Serial.print(" Temp F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
// Funzione per stampare i dati delle sonde
void printData(DeviceAddress deviceAddress)
{
Serial.print("Indirizzo dispositivo: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
/*
* LOOP
*/
void loop(void)
{
Serial.print("Richiesta Temperature...");
sensors.requestTemperatures();
Serial.println("OK");
printData(Sonda1);
printData(Sonda2);
}
Il problema è che alla compilazione da il seguente errore:
"No sich file or directory
#include <OneWire.h>"
L'errore scompare SOLO se non includo la libreria DallasTemperature......