#include <LiquidCrystal.h>
#define ONPin 8 //LED rosso = caldaia in funzione
#define OFFPin 9 //LED verde = caldaia in standby
#define LM35 A0 //sensore LM35 su pin A0
#define POT A1 //cursore potenziometro su pin A1
float readTemp(void); //prototipo della funzione che legge dal sensore
int acceso = 0; // inizialmente, caldaia spenta
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
pinMode(LM35,INPUT);
pinMode(POT,INPUT);
analogReference(INTERNAL); // per l'ADC usiamo il Vref interno da 1,1V
//(migliore risoluzione)
analogRead(LM35); // Prima lettura "a vuoto" (serve per l'assestamento
//dell'ADC)
pinMode(ONPin,OUTPUT); //LED rosso in uscita
pinMode(OFFPin,OUTPUT); //LED verde in uscita
lcd.begin(16,2);
lcd.setCursor(3,0); //su LCD appare il titolo per 2 secondi
lcd.print("Termostato");
lcd.setCursor(4,1);
lcd.print("Digitale");
delay(2000);
}
void loop()
{
float tamb = readTemp(); // legge il valore della temperatura e la memorizza
//nella variabile temp.
lcd.clear(); // pulisce lo schermo LCD
lcd.print("Tamb: ");
lcd.print(tamb,1); // Stampa la parte intera e un decimale della temp
lcd.print(' '); // Stampa uno spazio
lcd.print('C');
lcd.setCursor(0,1); // cursore in posizione: colonna 0, riga 1
lcd.print("Tprog: ");
int tprog = analogRead(POT);
tprog = map(tprog,0,1023,4,30); //tmin=4°C, tmax=30°C
lcd.print(tprog); // Stampa il valore di tprog sullo schermo
/* accensione dei LED con isteresi /
if(tamb < tprog-1) {
digitalWrite(ONPin, HIGH);
digitalWrite(OFFPin, LOW);
acceso = 1;
}
if(tamb > tprog+1) {
digitalWrite(ONPin, LOW);
digitalWrite(OFFPin, HIGH);
acceso = 0;
}
if (acceso == 1) {
lcd.setCursor(14,0);
lcd.print(''); //quando la caldaia è accesa, appare un ‘’ su LCD
}
else {
lcd.setCursor(14,0);
lcd.print(' ');
}
delay(1000); // attende 1 secondo
}
/ Funzione che legge la temperatura dal sensore */
float readTemp() {
float temp = 0.0; // valore convertito in temperatura (°C)
int val = 0; // valore quantizzato dall'ADC [0..1023]
int nread = 5; // numero di letture (consigliabile da 5 a 8)
float somma = 0.0; // somma delle letture
for (int i=0; i<nread; i++) {
val = analogRead(LM35); // legge il dato della tensione sul pin 'LM35'
temp = val / 9.31; // converte la temperatura in °C
somma += temp; // aggiunge alla somma delle temperature lette
}
return ( somma / nread ); // calcola il valore medio
}
volevo sapere come regolare la temperatura desiderata
mediante due pulsanti: con il primo si aumenta di 1°C alla volta, con il secondo la si diminuisce
della stessa quantità. potete anche spiegare cosa avete modificato grazie