Controllo del periodo di lampeggio tramite pulsante (blocking mode)

L'esperienza è tratta da: http://www.maffucci.it/2011/03/10/arduino-lezione-4-realizzare-un-programma-che-identifica-le-variazioni-di-stato/ 

Ma con modifiche!


Il pulsante è collegato al pin 7 (input) e il LED al pin 13 (output). Questa volta al posto dei 

#define BUTTON 7     // pin di input a cui è collegato il pulsante
#define LED 13       // LED collegato al pin digitale 13
vengono utilizzate le costanti intere che svolgono egregiamente lo stesso compito

const int BUTTON = 7;     // pin di input a cui è collegato il pulsante
const int LED = 13;       // LED collegato al pin digitale 13
Attenzione che è necessario tenere premuto il pulsante circa un secondo affinché Arduino senta il comando

(questo è un problema che impareremo a risolvere più avanti)

  1. Inizio: led acceso
  2. Primo tocco: led lampeggia con periodo di mezzo secondo
  3. Secondo tocco: led lampeggia con periodo di 1 secondo
  4. Terzo tocco: led lampeggia con periodo di 1 secondo e mezzo (al tocco successivo si riprende dal punto 1)

// All'inizio led acceso
// Primo tocco: led lampeggia con periodo di mezzo secondo
// Secondo tocco: led lampeggia con periodo un secondo
// Terzo tocco: led lampeggia con periodo un secondo e mezzo
// Quarto tocco: led acceso
// N.B. Affinché la pressione venga letta e abbia efficacia 
// è necessario tenere premuto il pulsante per un breve periodo

const int BUTTON = 7;     // pin di input a cui è collegato il pulsante
const int LED = 13;       // LED collegato al pin digitale 13

// Variabili globali 
bool statoButton;      // stato del pulsante 
int countButton     = 0;      // Conteggio del bottone

// Avvio dell'applicazione
void setup()  
{  
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input  
digitalWrite(LED, HIGH);    // accende il LED
}  
// Avvio del loop
void loop()  
{
  statoButton = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva
  if(statoButton == HIGH)             // verifico se l'utente ha premuto il bottone  
  {  
    // Aumento il count del bottone
    if(countButton<=3) countButton=countButton+1;  
    else countButton=0;  
    while(digitalRead(BUTTON) == HIGH);   // Aspettare il rilascio del pulsante
    // delay(200);   // debounce, decommentare se necessario
  }  
  // In base allo stato del bottone scelgo l'azione del led
  switch (countButton)  
  {  
    // Led lampeggia ogni mezzo secondo
  case 1:  
    digitalWrite(LED, HIGH);  // accende il LED
    delay(250);               // aspetta 250 millisecondi
    digitalWrite(LED, LOW);   // spegne il LED
    delay(250);               // aspetta 250 millisecondi
    break;  
    // Led lampeggia ogni secondo
  case 2:  
    digitalWrite(LED, HIGH);  // accende il LED
    delay(500);               // aspetta 500 millisecondi
    digitalWrite(LED, LOW);   // spegne il LED
    delay(500);               // aspetta 500 millisecondi
    break;  
    // led lampeggia ogni secondo e mezzo
  case 3:  
    digitalWrite(LED, HIGH);  // accende il LED
    delay(750);               // aspetta 750 millisecondi
    digitalWrite(LED, LOW);   // spegne il LED
    delay(750);               // aspetta 750 millisecondi
    break;  
    // Led si spegne
  case 0:  
    digitalWrite(LED, HIGH);  
    delay(15);                // aspetta per aumentare le performance
    break;  
  }  
} 


Ultime modifiche: martedì, 24 marzo 2020, 21:07