5.4.4 Progetto 2.2. Lampada da tavolo

1. Descrizione

Per una semplice lampada da tavolo comune, premendo il pulsante si accende; premendolo di nuovo si spegne.

2. Codice di test

Conta il numero di volte che il pulsante è stato premuto e calcola il resto della divisione per 2; otterrai 0 o 1, due valori di stato.

#define btn1 16
#define led_y 12
int btn_count = 0; // Counter for button presses

void setup()
{
  Serial.begin(9600);
  pinMode(btn1, INPUT);
  pinMode(led_y, OUTPUT);
}

void loop()
{
  boolean btn1_val = digitalRead(btn1);
  if(btn1_val == 0) // If button is pressed
  {
    delay(10);  // 10ms delay for debouncing
    if(btn1_val == 0) // Confirm button is still pressed
    {
      boolean btn_state = 1;
      while(btn_state == 1) // Loop until button is released
      {
        boolean btn_val = digitalRead(btn1);
        if(btn_val == 1)  // If button is released
        {
          btn_count++;    // Increment press counter
          Serial.println(btn_count);
          btn_state = 0;  // Exit loop
        }
      }
    }
    boolean value = btn_count % 2; // Modulo operation (0 or 1)
    if(value == 1)
    {
      digitalWrite(led_y, HIGH); // Turn LED on
    }
    else
    {
      digitalWrite(led_y, LOW); // Turn LED off
    }
  }
}

3. Risultato del test

Apri il monitor seriale per visualizzare il numero di pressioni del pulsante; premendo il pulsante una volta il LED si accende, premendolo di nuovo si spegne.

immagine40