ciao, come ormai mi succede un po' troppo di frequente ho ragionato troppo poco. Il codice per l'utilizzo del pulsante che ho pubblicato questa mattina conteneva un errore di funzionalità: non andava messa la riga con isteresi -= 0.1
Ho guardato il tuo codice e secondo me questo dovrebbe funzionare correttamente
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float tempC;
int TempC_Decimal = 0;
int tempPin = 0;
int DigitalPin = 13;
int TemperaturaMinima = 22;
int value = 0;
int isteresi = 1;
int buttonPin_inc = 6;
int buttonPin_dec = 7;
char stato_pulsanti = 0;
int lettura_pulsante = 0;
void setup() {
lcd.begin(4,20);
value = EEPROM.read(0);
if (value == 1)
{
TemperaturaMinima = EEPROM.read(1);
}
pinMode(DigitalPin, OUTPUT);
pinMode(buttonPin_inc, INPUT);
pinMode(buttonPin_dec, INPUT);
}
void loop() {
//valutazione di dati disponibili da seriale
if (Serial.available() > 0)
{
TemperaturaMinima = Serial.read();
EEPROM.write(0, 1);
EEPROM.write(1, TemperaturaMinima);
}
//gestione della pressione del pulsante collegato al pin 6 per incrementare l'isteresi
lettura_pulsante = digitalRead(buttonPin_inc);
if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x01))
{
isteresi += 0.1;
stato_pulsanti |= 0x01;
}
else
{
if(lettura_pulsante == LOW)
{
stato_pulsanti &= ~0x01;
}
}
//gestione della pressione del pulsante collegato al pin 7 per decrementare l'isteresi
lettura_pulsante = digitalRead(buttonPin_dec);
if((lettura_pulsante == HIGH) && !(stato_pulsanti & 0x02))
{
isteresi -= 0.1;
stato_pulsanti |= 0x02;
}
else
{
if(lettura_pulsante == LOW)
{
stato_pulsanti &= ~0x02;
}
}
//calcolo dela temperatura attuale
tempC = analogRead(tempPin); //read the value from the sensor
tempC = (5.0 * tempC * 100.0)/1024.0; //convert the analog data to temperature
TempC_Decimal = (tempC - (tempC)) * 100;
//visualizzazione a display
lcd.clear();
lcd.print ( "TEMP.INTERNA +" );
lcd.setCursor (14,0);
lcd.print(tempC);
lcd.setCursor (19,0);
lcd.print(TempC_Decimal);
lcd.setCursor (2,2);
lcd.setCursor (0,1);
lcd.print ( "TEMP.di soglia +" );
lcd.setCursor (18,1); //sposta i gradi di soglia sull'lcd
lcd.print(TemperaturaMinima); // scrive temperatura di soglia
//trasmissione via seriale della temperatura di soglia
Serial.println(TemperaturaMinima);
//gestione dell'attivazione/disattivazione dell'uscita in base alla temperatura letta
if (tempC < TemperaturaMinima)
{
digitalWrite(DigitalPin, HIGH); // set the LED on
delay(4000); // wait for a second
}
else
{
if (tempC > (TemperaturaMinima + isteresi))
{
digitalWrite(DigitalPin, LOW); // set the LED off
delay(4000);
}
}
delay(200);
}
prevede due pulsanti, uno per incrementare l'iscteresi (collegato al pin 6) e un oper decrementarla (collegato al pin 7) per lo schema fai sempre riferimento a www.arduino.cc/en/Tutorial/Button.
Per quel che riguarda la ventola tu dici "[...]questo funziona ma non imposta il livello di intervento ventola". Dove avresti collegato la ventola? E in che condizioni si dovrebbe attivare? Sul codice non c'è traccia di queste due cose.