]> git.piffa.net Git - sketchbook_andrea/blob - oggi/button_state_4_state_and_condition/button_state_4_state_and_condition.ino
5ac087927d40dbc49e4b345791375a3ffde06fca
[sketchbook_andrea] / oggi / button_state_4_state_and_condition / button_state_4_state_and_condition.ino
1 /*
2    Stato di un bottone
3  
4  Legge lo stato di un input
5  
6  */
7 int led = 13;
8 int buttonPin = 2;              
9 int statoAttuale;          // Variabile per leggere lo stato del bottone
10 int ultimoStato;           // Variabile per registrare l'ultimo stato del bottone
11 int ledStatus;             // varabile per mantenere lo stato del led
12
13 void setup() {
14   pinMode(buttonPin, INPUT);          // Set the switch pin as input
15   pinMode(led, OUTPUT);    
16   Serial.begin(9600);                 // Attiva la comunicazione seriale a 9600bps
17   ultimoStato = digitalRead(buttonPin);   // Prima lettura del bottone
18   ledStatus = 0;                          // Il LED viene inpostato come spento  
19 }
20
21 void loop(){
22   statoAttuale = digitalRead(buttonPin);      // Legge lo stato del bottone e lo resistra in val
23   delay(20);                                  // riduce l'effetto bounce
24   if (statoAttuale != ultimoStato && statoAttuale == HIGH) { // due condizione contemporanee
25     // lo stato del bottone e' camabiato AND lo stato attuale e' HIGH
26       Serial.println("Button premuto");
27     
28       ledStatus = !ledStatus ;    // Inverte lo stato del LED 
29       // ledStatus = 1 - ledStatus ;    // Forma analoga
30       
31       Serial.print("Stato del LED: ");  // DEBUG
32       Serial.println(ledStatus) ;
33   }
34
35   ultimoStato = statoAttuale;        // Aggiorna lo stato finale al valore attuale
36   digitalWrite(led, ledStatus);      // setta il led allo stato richiesto
37
38 }
39
40
41
42 /* Domande:
43
44  1. La variabile ledstatus serve per tenere traccia dello stato del LED: 
45     si potrebbe fare a meno di questa? 
46     Cosa fa Arduino quando deve accendere o spegnere un LED?
47     Come funziona DigiralRead() ?
48
49  .
50  .
51  .
52  .
53  .
54  .
55  .
56  .
57  .
58  .
59  .
60  .
61  .
62  .
63  .
64  Soluzione:
65
66  1. Per accendere o spegnere un LED Arduino imposta il valore del registro corrispondente
67     al PIN: se questo e' 0 il circuito e' aperto mentre se e' 1 il circuito e' chiuso.
68     Allo stesso modo con DigitalRead() e' possibile leggere lo stato di quel registro
69     e conoscere se il LED e' acceso o spento.    
70     - https://www.arduino.cc/en/Reference/PortManipulation
71     - http://www.instructables.com/id/Microcontroller-Register-Manipulation/
72  */