Menu
CoddyTech

Alterna a ogni pressione

Fa parte della sezione Ingressi del percorso Arduino di Coddy. Lezione 4 di 22.

Finora il LED ha imitato il pulsante: acceso mentre lo tieni premuto, spento quando lo rilasci. Un interruttore della luce funziona diversamente: premi una volta per accenderla, premi di nuovo per spegnerla. Questo si chiama toggle.

Per alternare lo stato, lo sketch deve rilevare il momento in cui il pulsante viene premuto: è premuto adesso, ma non lo era l'ultima volta che loop() è stato eseguito. Quel momento si chiama fronte. Conserva l'ultima lettura in una variabile sopra setup(), come un contatore:

int lastReading = HIGH;

void loop() {
  int reading = digitalRead(2);
  if (reading == LOW && lastReading == HIGH) {
    // il pulsante è stato premuto
  }
  lastReading = reading;
}

Tenendo premuto il pulsante, la lettura rimane LOW, quindi il fronte si verifica una volta per ogni pressione, per quanto a lungo tu lo tenga premuto.

Per invertire un bool, usa !, che significa "non": ledOn = !ledOn; trasforma true in false e viceversa.

challenge icon

Sfida

Medio

Il pulsante è sul pin 2 (INPUT_PULLUP) e il LED sul pin 13. Fai in modo che ogni pressione alterni lo stato del LED:

  • quando il pulsante viene premuto (LOW ora, HIGH l’ultima volta), inverti ledOn
  • salva la lettura in lastReading alla fine di loop()
  • accendi o spegni il LED in base a ledOn

Premi Run, premi il pulsante alcune volte, poi Check.

Provalo tu

const int buttonPin = 2;
const int ledPin = 13;

bool ledOn = false;
int lastReading = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(buttonPin);
  // inverti ledOn quando il pulsante viene premuto
  // memorizza questa lettura per la prossima volta
  // accendi o spegni il LED in base a ledOn
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Ingressi

Esercitati da solo: Playground Arduino