/*
- * Alternating switch
+ Stato di un bottone
+
+ Legge lo stato di un input
+
*/
-int switchPin = 2; // switch is connected to pin 2
-int val; // variable for reading the pin status
-int buttonState; // variable to hold the last button state
+int switchPin = 2; // switch connesso al pin 2
+ // Nota: le prossime due variabili sono
+ // solo "definite" e non "inizializzate"
+int statoAttuale; // Variabile per leggere lo stato del bottone
+int ultimoStato; // Variabile per registrare l'ultimo stato del bottone
void setup() {
pinMode(switchPin, INPUT); // Set the switch pin as input
Serial.begin(9600); // Set up serial communication at 9600bps
- buttonState = digitalRead(switchPin); // read the initial state
+ ultimoStato = digitalRead(switchPin); // read the initial state
}
void loop(){
- val = digitalRead(switchPin); // read input value and store it in val
-
- if (val != buttonState) { // the button state has changed!
- if (val == LOW) { // check if the button is pressed
- Serial.println("Button just pressed");
- } else { // the button is -not- pressed...
- Serial.println("Button just released");
+ statoAttuale = digitalRead(switchPin); // Legge lo stato del bottone e lo resistra in val
+ delay(20); // riduce l'effetto bounce
+ if (statoAttuale != ultimoStato) {
+ // verifica due condizioni che devono realizzarsi contemporaneamente
+ if (statoAttuale == HIGH) { // il bottone e' stato premuto
+ Serial.println("Bottone premuto");
+ }
+ else { // il bottone non e' premuto...
+ Serial.println("Bottone rilasciato");
}
}
- buttonState = val; // save the new state in our variable
+ ultimoStato = statoAttuale; // Aggiorna lo stato finale al valore attuale
}
+
+/* Domande:
+
+ 1. Cosa succde se non uso un delay(20) alla lettura del bottone?
+ 2. Implementare un LED che cambia stato quando viene premuto il bottone.
+ 3. Quanti stati ha il LED?
+ 4. Sarebbe possibile passare rapidamente da uno stato all'altro?
+
+ */
+