/* 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
}