Ciao a tutti, sto integrando 3 sonde di temperatura nel mio progetto.
Uso la libreria Dallastemperature.h
Il monitor seriale mi mostra il valore di 85° per due delle tre sonde in maniera randomica; qualcuno mi potrebbe aiutare a capire come mai?
Grazie
Questo lo sketch
#include <OneWire.h>
#include <DallasTemperature.h>
int intTempPlafo = 45;
int intTempCentr = 35;
int intTempVasca = 25;
int DeltaTempVasca = 1;
int DeltaTempCentr = 5;
int DeltaTempPlafo = 5;
const int Riscaldatore = 22;
const int PompaFiltro = 23;
const int PompaOsmo = 24;
const int Luce = 25;
const int Refrigeratore = 26;
const int LuceNotte = 27;
const int VentolaPlafo = 28;
const int VentolaCentr = 29;
const int Galleggiante = 30;
long delayTemp;
long lungDelayTemp = 5; // INDICARE IN SECONDI
long sviluppoDelayTemp;
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS); devices
DallasTemperature sensors(&oneWire);
DeviceAddress TempCentr = { 0x28, 0x36, 0xD2, 0x32, 0x04, 0x00, 0x00, 0x4D };
DeviceAddress TempPlafo = { 0x28, 0x5F, 0x04, 0x51, 0x05, 0x00, 0x00, 0x69 };
DeviceAddress TempVasca = { 0x28, 0xAE, 0x5D, 0x5C, 0x06, 0x00, 0x00, 0x33 };
void setup(void)
{
pinMode(Riscaldatore, OUTPUT);
pinMode(PompaFiltro, OUTPUT);
pinMode(PompaOsmo, OUTPUT);
pinMode(Luce, OUTPUT);
pinMode(Refrigeratore, OUTPUT);
pinMode(LuceNotte, OUTPUT);
pinMode(VentolaPlafo, OUTPUT);
pinMode(VentolaCentr, OUTPUT);
pinMode(Galleggiante, INPUT);
sviluppoDelayTemp = lungDelayTemp * 1000;
delayTemp = sviluppoDelayTemp;
Serial.begin(19200);
sensors.begin();
sensors.setResolution(TempCentr, 10);
sensors.setResolution(TempPlafo, 10);
sensors.setResolution(TempVasca, 10);
digitalWrite(Riscaldatore,HIGH);
digitalWrite(PompaFiltro,HIGH);
digitalWrite(PompaOsmo,HIGH);
digitalWrite(Luce,HIGH);
digitalWrite(Refrigeratore,HIGH);
digitalWrite(LuceNotte,HIGH);
digitalWrite(VentolaPlafo,HIGH);
digitalWrite(VentolaCentr,HIGH);
}
void printTemperature(DeviceAddress deviceAddress)
{
delay(700);
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Errore di lettura...");
} else {
Serial.print("C: ");
Serial.print(tempC);
}
}
void loop(void)
{
if (millis() >= delayTemp){
Serial.print("Lettura Temperature...\n\r");
sensors.requestTemperatures();
Serial.print("Temperatura centralina: ");
printTemperature(TempCentr);
Serial.print("\n\r");
Serial.print("Temperatura plafo: ");
printTemperature(TempPlafo);
Serial.print("\n\r");
Serial.print("Temperatura vasca: ");
printTemperature(TempVasca);
Serial.print("\n\r\n\r");
delayTemp = millis() + sviluppoDelayTemp;
}
if(sensors.getTempC(TempCentr) >= (intTempCentr + DeltaTempCentr)){
digitalWrite(VentolaCentr,LOW);
}
if(sensors.getTempC(TempCentr) < (intTempCentr - DeltaTempCentr)){
digitalWrite(VentolaCentr,HIGH);
}
if(sensors.getTempC(TempPlafo) >= (intTempPlafo + DeltaTempPlafo)){
digitalWrite(VentolaPlafo,LOW);
}
if(sensors.getTempC(TempPlafo) < (intTempPlafo - DeltaTempPlafo)){
digitalWrite(VentolaPlafo,HIGH);
}
if(sensors.getTempC(TempVasca) >= (intTempVasca + DeltaTempVasca)){
digitalWrite(Refrigeratore,LOW);
digitalWrite(Riscaldatore,HIGH);
}
if(sensors.getTempC(TempVasca) < (intTempVasca - DeltaTempVasca)){
digitalWrite(Refrigeratore,HIGH);
digitalWrite(Riscaldatore,LOW);
}
if((sensors.getTempC(TempVasca) > (intTempVasca - DeltaTempVasca)) && (sensors.getTempC(TempVasca) < (intTempVasca + DeltaTempVasca))){
digitalWrite(Refrigeratore,HIGH);
digitalWrite(Riscaldatore,HIGH);
}
}