Ciao a tutti, sto creando un piccolo termometro ma non capisco dove sbaglio?
Vi spiego, ho inserito un led RGB, che dovrebbe accendere blu sotto i 5°, rosso sopra i 60° e verde a 24.71° (il valore di partenza del sensore su tinkercad).
Finche compilo il programma con il valore minimo e massimo non ho nessun problema, il problema inizia quando inserisco la riga di comando per l'accensione del led verde, in pratica rimane sempre acceso da 5,01° a 59,99°, mentre teoricamente dovrebbe accendersi solo a 24,71°.
Non capisco perché.
Anche la parte di testo che indica ">" o "<" collegata al valore di temperatura, non va nel senso se scendo sotto i 5° indica "<", ma risalendo non scompare ma rimane sul display, stessa cosa per il valore sopra i 60°
Vi allego il codice, spero possiate aiutarmi grazie ![]()
// Biblioteca LCD
#include <LiquidCrystal.h>
// Inizializza la biblioteca LCD
LiquidCrystal LCD(12,11,5,4,3,2);
// definisce il pin per il sensore temperatura
int SensorTempPin=0;
// Definisce il pin per la temperatura bassa (BLU)
int AllertaTempBassa=10;
// Definisce il pin per la temperatura alta (ROSSO)
int AllertaTempAlta=8;
// definisce il pin per la temperatura corretta (VERDE)
int TemperaturaOK=13;
// Definisce il valore di temperatura bassa per l'accensione del led
int TempBassa=5;
// Definisce il valore di temperatura alta per l'accensione del led
int TempAlta=60;
// Definisce il valore di temperatura corretta per l'accensione del led
float TempOK=24.71;
void setup() {
// Definisce come uscita il pin di temperatura bassa
pinMode(AllertaTempBassa, OUTPUT);
// Definisce come uscita il pin di temperatura alta
pinMode(AllertaTempAlta, OUTPUT);
// Definisce come uscita il pin di temperatura OK
pinMode(TemperaturaOK, OUTPUT);
// Definisce la quantita di collonne e linee del dislapy
LCD.begin(16,2);
// Scrive il messaggio tra "" sul display
LCD.print("Temperatura:");
// Cambia il cursore nella prima colonna e nella seconda riga
// del display LCD
LCD.setCursor(0,1);
// Scrive il messaggio tra "" sul diplay
LCD.print(" C F");
}
void loop() {
// Legge la tensione sul sensore temperatura
int SensorTempTens=analogRead(SensorTempPin);
// Converte la tensione letta
float Tens=SensorTempTens*5;
Tens/=1024;
// Converte la tensione letta in gradi celsius
float TemperaturaC=(Tens-0.5)*100;
// Converte la temperatura da C a F
float TemperaturaF=(TemperaturaC*9/5)+32;
// Cambia il cursore nella prima colonna e nella seconda riga
// del display LCD
LCD.setCursor(0,1);
// Scrive la temperatura in °C
LCD.print(TemperaturaC);
// Cambia il cursore nella prima colonna e nella seconda riga
// del display LCD
LCD.setCursor(9,1);
// Scrive la temperatura in °F
LCD.print(TemperaturaF);
// Attiva e disattiva gli avvisi luminosi di bassa e alta
// temperatura
if (TemperaturaC>=TempAlta) {
LCD.setCursor(13,0);
LCD.print(">");
digitalWrite(AllertaTempAlta, HIGH);
digitalWrite(TemperaturaOK, LOW);
digitalWrite(AllertaTempBassa, LOW);
}
else if (TemperaturaC<=TempBassa){
LCD.setCursor(13,0);
LCD.print("<");
digitalWrite(AllertaTempBassa, HIGH);
digitalWrite(AllertaTempAlta, LOW);
digitalWrite(TemperaturaOK, LOW);
}
else if (TemperaturaC=TempOK){
LCD.setCursor(13,0);
LCD.print("OK");
digitalWrite(TemperaturaOK, HIGH);
digitalWrite(AllertaTempBassa, LOW);
digitalWrite(AllertaTempAlta, LOW);
}
// Attende 1 secondo
delay(1000);
}