Grazie Guglielmo, avevo letto il regolamento ma mi era sfuggito.
Il post è questo, ho aggiunto i commenti a lato, il problema descritto avviene quando siamo nel MAIN...
// RONER AUTOMATICO
//
// Dispositivi in uso: Arduino uno, bollitore a immersione, pompa acqua, modulo relay.
//
//
// Lo sketch chiede a quale temperatura vogliamo mantenere l'acqua, il relay disattiva il bollitore quando la
// temperatura è speriore a quella richiesta per riattivarsi appena diminuisce poco sotto il valore richiesto
#include <Keypad.h>
#include <EEPROM.h>
int addr = 0;
int addr1 = 1;
const int buttonPin = A0; //pulsante + temperatura
const int buttonPin1 = A1; //pulsante - temperatura
int buttonState = 0; //valore iniziale bottone 0
int buttonState1 = 0; //valore iniziale bottone 0
int temp = 0;
int time = (millis()/1000);
#include <LiquidCrystal.h>
#define RELAY 9
float temperature;
int reading;
int lm35Pin = A5;
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int backLight = 8;
byte newChar[8] = {
B11000,
B11000,
B00011,
B00100,
B00100,
B00100,
B00011,
B00000
};
byte newChar1[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte goccia[8] = {
B00000,
B00100,
B00100,
B01010,
B10001,
B10001,
B11011,
B01110
};
void setup()
{ lcd.begin(16,2);
digitalWrite(RELAY,LOW); //relay acceso
lcd.createChar(8, newChar);
lcd.createChar(9, newChar1);
lcd.createChar(7, goccia);
pinMode(RELAY, OUTPUT);
pinMode(backLight, OUTPUT);
analogWrite(backLight, 200);
analogReference(INTERNAL);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("RONER");
delay(800);
lcd.setCursor(4,1);
lcd.print("by ME");
delay(1200);
lcd.clear();
lcd.setCursor(2,1);
lcd.print("TEMPERATURA");
lcd.setCursor(3,0);
lcd.print("SELEZIONE");
for (int i = 0; i < 512; i++) //AZZERA EEPROM
EEPROM.write(i, 0);
pinMode(buttonPin, INPUT);
lcd.clear();
}
void loop()
{
lcd.setCursor(2,0); // SELEZIONE DELLA TEMPERATURA
lcd.print("gradi?"); //
lcd.setCursor(14, 0); // Lo sketch chiede quale temperatura desideriamo che venga
lcd.write(8); // mantenuta, abbiamo 30 secondi di tempo per selezionarla.
//
lcd.setCursor(2,1); // Tenendo premuto il primo tasto la temperatura aumenta, col
lcd.print("tempo"); // secondo diminuisce, alla fine dei 30 secondi il sistema
// usa la temperatura visualizzata a display.
lcd.setCursor(9,1); //
lcd.print(millis()/1000); //
lcd.setCursor(11,1); //
lcd.print("/30"); //
//
if(millis()/1000==30){ //
lcd.clear(); // FINE SELEZIONE
lcd.setCursor(2,0); // CONFERMA SELEZIONE
lcd.print("temperatura"); //
lcd.setCursor(2,1); // Qui viene confermata la temperatura scelta per 3 secondi, in seguito
lcd.print("scelta"); // si avvia lo sketch.
lcd.setCursor(12, 1); //
lcd.write(8); //
lcd.setCursor(9,1); //
lcd.print(temp); //
delay(3000); //
lcd.clear(); //
goto MAIN;
MAIN: // LABEL PRINCIPALE
//
// lo sketch legge la temperatura del LM35DZ e spegne il relay se la temperatura è
// superiore alla temperatura selezionata. QUI SI PONE IL PROBLEMA, QUANDO LA TEMPERATURA E' SUPERIORE
// IL RELAY SI ACCENDE E A QUESTO PUNTO LA LETTURA DELLA TEMPERATURA E' SBALLATA, SE IL RELAY VIENE
// DISATTIVATO TORNA A LEGGERE CORRETTAMENTE I VALORI...
reading = analogRead(lm35Pin);
temperature = reading / 9.31;
delay(400);
lcd.setCursor(0,0);
lcd.print("acqua");
lcd.setCursor(6,0);
lcd.write(7);
lcd.setCursor(7,0);
lcd.write(7);
lcd.setCursor(14,0);
lcd.write(8);
lcd.setCursor(10,0);
lcd.print(temperature);
lcd.setCursor(4,1);
lcd.print("target");
lcd.setCursor(14,1);
lcd.write(8);
lcd.setCursor(11,1);
lcd.print(temp);
if (temperature >= temp)
{
digitalWrite(RELAY,HIGH);
}
if (temperature < temp)
{
digitalWrite(RELAY,LOW);
}
goto MAIN;
}
buttonState = digitalRead(buttonPin); //selezione temperatura:
if (buttonState == HIGH) { //pulsante + temperatura
// turn LED on:
temp = temp + 1;
lcd.setCursor(11,0);
lcd.print(temp);
delay(130); }
buttonState1 = digitalRead(buttonPin1); //selezione temperatura:
if (buttonState1 == HIGH) { //pulsante + temperatura
// turn LED on:
temp = temp - 1;
lcd.setCursor(11,0);
lcd.print(temp);
delay(100);
}}