/* Tutorial Luce Temporizzata con comando locale e remoto via web
 *  
 *  http://etabetastudio.blogger.com
 *  
 *  Pinto Massimo - Chistian Acqua
 */

const int buttonPin = 5;     // pin dello switch button
const int ledPin =  13;      // pin del led di segnalazione
const int relPin =  12;      // pin del rele

int buttonState = 0;         // stato switch
int ledrelon = 0;               //stato led e rele 
unsigned long conteggio = 5000;  // durata temorizzazioni in millisecondi
unsigned long previsioneMillis=0;  // variabili di inizio e fine conteggio
unsigned long correntiMillis=0;   // variabili di inizio e fine conteggio


void setup(){
  Serial.begin(9600); // inizializziamo la seriale
  pinMode(ledPin, OUTPUT); //inizializziamo i pin 
  pinMode(relPin, OUTPUT); //inizializziamo i pin 
  pinMode(buttonPin, INPUT);//inizializziamo i pin
  digitalWrite(ledPin, LOW);//inizializziamo i pin
}
void loop(){
unsigned long correntiMillis = millis();   // memorizziamo il valore di millis 
buttonState = digitalRead(buttonPin);  //catturiamo lo stato dello switch button

// Se lo Switch button è alto
if (buttonState == HIGH) {
    Serial.println("bottone giu"); // facciamo un po di stampe per capire cosa succede
    ledrelon = 1; // abilitiamo l'ingresso alla condizione successiva
    previsioneMillis = correntiMillis + conteggio;  // creiamo il valore di off sommando i millis catturati prima + il tempo impostato di off
            Serial.print("correntiMillis: "); // facciamo un po di stampe per capire cosa succede
        Serial.println(correntiMillis); // facciamo un po di stampe per capire cosa succede
    Serial.print("previsioneMillis: "); // facciamo un po di stampe per capire cosa succede
    Serial.println(previsioneMillis); // facciamo un po di stampe per capire cosa succede
    }
if(ledrelon == 1){
    digitalWrite(ledPin, HIGH); // accendiamo il led
    digitalWrite(relPin, HIGH); // eccitiamo il rele
    delay(500); // questo delay non è fondamentale serve a leggere le stampe sul serial monitor
        Serial.print("correntiMillis: ");
        Serial.println(correntiMillis);
   if (correntiMillis >= previsioneMillis) {
        delay(10);
        digitalWrite(ledPin, LOW); // raggiunto il tempo di spegnimento tutto va giù
        digitalWrite(relPin, LOW);
        ledrelon = 0; // reimpostiamo ledrelon per iniziare nuvamente un ciclo
        }
         }
         }