nel loop
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <DallasTemperature.h>
#include <Wire.h>
#define ONE_WIRE_BUS 14
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors (&ourWire);
const int buttonUpPin = 10; //numero pin a cui è collegato il pulsante di UP
const int buttonDownPin = 9; //numero pin a cui è collegato il pulsnte di DOWN
const int buttonMenuPin = 8; //numero pin a cui è collegato il pulsnte Menu
const int buttonStartPin = 7; //numero pin a cui è collegato il pulsnte Start
int buttonUpState; //stato attuale del pulsante di UP
long UpDebounceTime; //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di UP
long buttonUpPressedTime; //tempo che indica da quanto è stato premuto il pulsante
boolean buttonUpPressed; //memoria che indica il passaggio da LOW a HIGH del pulsante di UP
boolean repeatUp; //memoria che indica il repeat del pulsante attivo
long repeatUpTime; //tempo che indica da quanto è attivo il repeat
long lastRepeatUpTime; //variabile di appoggio per calcolare repeatUpTime
int addUp; //fattore per incrementare la variabile
int buttonDownState; //stato attuale del pulsante di Down
long DownDebounceTime; //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante di Down
long buttonDownPressedTime; //tempo che indica da quanto è stato premuto il pulsante
boolean buttonDownPressed; //memoria che indica il passaggio da LOW a HIGH del pulsante di Down
boolean repeatDown; //memoria che indica il repeat del pulsante attivo
long repeatDownTime; //tempo che indica da quanto è attivo il repeat
long lastRepeatDownTime; //variabile di appoggio per calcolare repeatDownTime
int addDown; //fattore per incrementare la variabile
int buttonMenuState; //stato attuale del pulsante Menu
long MenuDebounceTime; //Variabilie di appoggio per calcolare il tempo di cambio di stato del pulsante Menu
int counterMenu = 0; //Valore incrementato di 1 col pulsante Menu per gestire i settaggi
int lastCounterMenu; //Variabile di appoggio per il contatore per un solo incremento ad ogni pressione
int buttonStartState; //stato attuale del pulsante Start
long startDebounceTime; //Variabile per l'antirimbalzo del pulsante
int startState; //memorizza lo stato di start acceso o spento
int lastStartState = LOW; //memorizza ultimo stato quando viene rilasciato il tasto start
long debounceDelay = 100; //Tempo di debounce per i pulsanti
long pressedDelay; //variabile per determinare l' attivazione del repeat e il tempo di repeat quando è attivo
long timeRepeatEnable = 500; //costante che determina il tempo minimo per cui deve rimanere premuto il pulsante prima di ripetere l'operazione
long timeRepeat = 250; //costante che determina il tempo di ripetizione di UP e di DOWN
const int numStep = 5;
int timeStep[numStep] = {0,60,60,120,60};
int timeStepMax[numStep] = {2880,300,300,300,300};
int timeStepMin = 0;
long timeStepStart;
int temperatureStep[numStep] = {0, 148, 371, 732, 595,};
int temperatureStepMin = 0;
int temperatureStepMax = 1000;
int temperatureIn;
int counterControl;
float hhFloat;
int hh; //VARIABILE UTILIZZATA PER LE ORE
int mm; //VARIABILE UTILIZZATA PER I MINUTI
int hhINT;
void setup() {
Serial.begin(9600);
sensors.begin();
lcd.begin (16, 2);
pinMode (buttonUpPin, INPUT); //impostazione buttonUpPin come ingresso
pinMode (buttonDownPin, INPUT); //impostazione buttonDownPin come ingresso
pinMode (buttonMenuPin, INPUT);
pinMode (buttonStartPin, INPUT);
}
void loop() {
int readingUp = digitalRead(buttonUpPin);
int readingDown = digitalRead(buttonDownPin);
int readingMenu = digitalRead(buttonMenuPin);
int readingStart = digitalRead(buttonStartPin);
if (readingUp == HIGH) {
if ((millis() - UpDebounceTime) > debounceDelay) {
buttonUpState = HIGH;
}
} else {
buttonUpState = LOW;
UpDebounceTime = millis();
}
if (readingDown == HIGH) {
if ((millis() - DownDebounceTime) > debounceDelay) {
buttonDownState = HIGH;
}
} else {
buttonDownState = LOW;
DownDebounceTime = millis();
}
if (readingMenu == HIGH) {
if ((millis() - MenuDebounceTime) > debounceDelay) {
buttonMenuState = HIGH;
}
} else {
buttonMenuState = LOW;
lastCounterMenu = counterMenu;
MenuDebounceTime = millis();
}
if (buttonMenuState == HIGH && lastCounterMenu == counterMenu) {
if (counterMenu <= 9) {
counterMenu++;
lcd.clear();
} else {
counterMenu = 0;
lcd.clear();
}
}
if (readingStart == HIGH) {
if ((millis() - startDebounceTime) > debounceDelay) {
buttonStartState = HIGH;
}
} else {
buttonStartState = LOW;
startDebounceTime = millis();
lastStartState = startState;
}
switch (counterMenu) {
case 0:
sensors.requestTemperatures();
lcd.setCursor(0, 0);
lcd.print ("TEMPERATURA INT");
lcd.setCursor(4, 1);
lcd.print (char(223));
lcd.print ("C ");
lcd.print (sensors.getTempCByIndex(0));
break;
case 1:
timeSet (0);
printTime (0);
break;
case 2:
timeSet (1);
printTime (1);
break;
case 3:
temperatureSet (1);
printTemperature (1);
break;
case 4:
timeSet (2);
printTime (2);
break;
case 5:
temperatureSet (2);
printTemperature (2);
break;
case 6:
timeSet (3);
printTime (3);
break;
case 7:
temperatureSet (3);
printTemperature (3);
break;
case 8:
timeSet (4);
printTime (4);
break;
case 9:
temperatureSet (4);
printTemperature (4);
break;
case 10:
lcd.setCursor (0, 0);
lcd.print ("AVVIO PROGRAMMA?");
lcd.setCursor (0, 1);
lcd.print ("START PER AVVIO");
if (buttonStartState == HIGH && lastStartState == startState) {
startState = !startState;
lcd.clear();
timeStepStart = millis();
counterMenu++;
}
break;
case 11:
temperature();
break;
}
}