/* UD5.LAB5A - Rotazione Display Bidirezionale */
#include "MyDisplay.h"


/* CONNESSIONI HARDWARE */
#define PIN_BUTTON  10          // pin connesso al pulsante (inversione di direzione)


/* PARAMETRI DI FUNZIONAMENTO */
#define STEP_MILLIS 400         // Durata di uno step


/* Variabili Globali x Display */
unsigned long millisLastEvent = 0;    // Ultimo istante in cui si è verificato l'evento di incremento/decremento segmento del display

/* Variabili Globali x Pulsante */
int buttonOld = 0;                    // Valore del pulsante nel precedente loop

void setup() {
  Serial.begin(9600);                               // Inizializzazione porta seriale
  setupDisplay();
  pinMode(PIN_BUTTON, INPUT_PULLUP);                // Imposto il PIN_BUTTON come Input con resistenza di PullUp interna
}

void loop() {

  /* Rilevamento del fronte di salita del pulsante */
  int buttonNow = !digitalRead(PIN_BUTTON);         // Lettura stato attuale del pulsante
  if (buttonOld==0 && buttonNow==1){                // Verifica del fronte di salita
    // Fronte di salita
    Serial.println("FRONTE DI SALITA");  
    changeRotation();
  }
  
  buttonOld = buttonNow;                            // Memorizzazione dello stato attuale nello stato precedente per il successivo ciclo del loop

  /* Temporizzazione della rotazione step */
  unsigned long millisNow = millis();               // Istante attuale
  if( millisNow - millisLastEvent > STEP_MILLIS){   // Verifica del passaggio di STEP_MILLIS dall'ultimo evento
      stepDisplay();                                  // Step del display
      millisLastEvent = millisNow;                    // Memorizzazione istante attuale nella variabile globale dell'ultimo evento
  }

  delay(20);                                        // Debounce
}