È il mio primo lavoro , quindi è scritto molto da analfabeta tieni presente questo .
Rispetto a quello che ti ho scritto mi ero scordato di che ho cambiato i PIN dei sensori , ma ti ricordo che quando lo provavo con i potenziometri il problema non c'è.
CIao e grazie per l'aiuto IMer
/*
The circuit:
- LCD RS pin to digital pin 2
- LCD Enable pin to digital pin 3
- LCD D4 pin to digital pin 4
- LCD D5 pin to digital pin 5
- LCD D6 pin to digital pin 6
- LCD D7 pin to digital pin 7
- 10K resistor:
- ends to +5V and ground
- wiper to LCD VO pin (pin 3)
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int analogPin0 = 0 ;// Differenza di temperatura per Accensione
int analogPin1 = 1 ;// Temperatura Accumulo
int analogPin2 = 2 ;// Temperatura Camino
int analogPin3 = 3 ;// Differenza di temperatura per spegnimento
int buttonState = 0; // Stato del pulsante in Pin 7
float Accumulo = 0 ;// temperatura Accumulo
float Camino = 0 ;// temperatura Camino
float val = 0 ;// temperatura di accensione pompa
float scatto = 0 ;// temperatura di spegnimento pompa
float costante = 0 ;
float ripristino = 0 ;
String messaggio ;
long previousMillis = 0 ;
long interval = 1000 ;// Lampeggio RUN per capire se funziona
long luce = 10 ;// Tempo di accensione retro illuminazione
int a = 0 ;
int b = 0 ;
void setup() {
// Serial.begin(9600);
pinMode(11, INPUT) ;// Pulsante cambio finestra
pinMode(13, OUTPUT) ;// Per accendere la pompa
pinMode (12,OUTPUT) ;// Attiva la retroilluminazione
digitalWrite(12,LOW);
costante = (float) 4/40 ;//Taratura lettura in temperatura in funzione della sonda
lcd.begin(20,2) ;// Setto LCD 20 caratteri 2 righe
lcd.clear() ;// Cancello tutto il display
lcd.setCursor(0, 0) ;// Sposto il cursore in colonna e riga
lcd.print("Termostato by Imer") ;
lcd.setCursor(0, 1);
lcd.print ("differenziale V2.0");
delay (2000);
lcd.clear () ;
lcd.setCursor(7, 0);
lcd.print ("Per");
lcd.setCursor(3, 1);
lcd.print ("Marco Molinari");
delay (2000);
lcd.clear () ;
digitalWrite(12,HIGH);
}
void loop() {
char str[12] = {'0','0','0','0','0','0','0','0','0','0','0','0'} ; //stringa che conterrà la stringa risultato
buttonState = not(digitalRead(11)) ; //Legge lo stato del pulsante
Accumulo = (analogRead(analogPin1) * (float)costante) ;
Camino = (analogRead(analogPin2) * (float)costante) ;
val = (analogRead(analogPin3) * (float)costante) ;
scatto = (analogRead(analogPin0) * (float)costante) ;
if (scatto <= 1 ) {scatto = 1 ; }
if ((val - scatto) <= 1 ) { val = (scatto + 1) ; }
if (buttonState == LOW) {
messaggio = dtostrf (Accumulo,5,1,str);
lcd.setCursor(0, 0);
lcd.print ("Boiler = " + String(messaggio) + char(223) + " " );
messaggio = dtostrf (Camino,5,1,str);
lcd.setCursor(0, 1);
lcd.print ("Camino = " + String(messaggio) + char(223) + " " );
}
if (buttonState == HIGH) {
if (b == 0 ){ b ++ ; } ; // fa partire il tempo della retroinluminazione per b = 0
digitalWrite (12,LOW) ; // accende la retro illuminazione
messaggio = dtostrf (val,4,1,str);
lcd.setCursor(0, 0);
lcd.print ("Temp. ON = " + String(messaggio) + char(223));
messaggio = dtostrf (scatto,4,1,str);
lcd.setCursor(0, 1);
lcd.print ("Temp.OFF = " + String(messaggio) + char(223));
}
if ((Camino - val + ripristino) > Accumulo) {
lcd.setCursor(17, 0);
lcd.print (" ON");
digitalWrite(13, HIGH) ; //accende la pompa
ripristino = (float)scatto;
} else{
lcd.setCursor(17, 0);
lcd.print ("OFF");
digitalWrite(13, LOW) ; //spegne la pompa
ripristino = (float)0;
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (a == 0){ ;// pulsazione per verifica funzionamento display
a = 1 ;
lcd.setCursor (17,1);
lcd.print ("RUN");
}else{
a = 0;
lcd.setCursor (17,1);
lcd.print (" ") ;
}
if (b!= 0) { ;// calcolo tempo di accensione retro illuminazione display
if (buttonState == LOW) { b++ ; }
if (buttonState == HIGH) { b = 1 ; }
}
if(b >= (luce * 2) ) { ;// calcolo tempo di accensione retro illuminazione display
b = 0 ;// luce è moltiplicata per 2 perchè il passaggio avviene 2 volte uno per "RUN" e " "
digitalWrite (12,HIGH);
}
}
// Serial.println (b);
}