Menu
CoddyTech

DISCESA, SALITA e CAMBIAMENTO

Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 13 di 18.

L'Uno ha due pin che possono attivare un interrupt: il pin 2 e il pin 3. Un pulsante che richiede un interrupt deve essere collegato a uno di essi. All'interno del chip corrispondono all'interrupt 0 e all'interrupt 1, quindi lascia che digitalPinToInterrupt() converta il pin nel suo numero. attachInterrupt(3, ...) richiede l'interrupt 3, che l'Uno non ha, e non succede nulla.

L'ultima parte di attachInterrupt() indica a quale cambiamento reagire:

  • FALLING: il pin passa da HIGH a LOW (con una resistenza di pull-up, una pressione)
  • RISING: il pin passa da LOW a HIGH (un rilascio)
  • CHANGE: entrambi

Con CHANGE, l'ISR viene eseguita alla pressione e al rilascio. Legge il pin per scoprire quale dei due eventi si è verificato:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // è stato premuto
  } else {
    // è stato rilasciato
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

Sfida

Facile

Il pulsante è sul pin 3 e loop() è occupato con un'attività lenta. Fai in modo che il LED sul pin 13 segua immediatamente il pulsante:

  • in onChange(), leggi il pulsante: LOW accende il LED, HIGH lo spegne
  • collega onChange() al pin del pulsante con CHANGE

Premi Run, tieni premuto e rilascia il pulsante, poi premi Check.

Provalo tu

const int ledPin = 13;
const int buttonPin = 3;

// Viene eseguito ogni volta che cambia lo stato del pin del pulsante.
void onChange() {
  // accendi il LED quando il pulsante è premuto e spegnilo quando viene rilasciato
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // collega onChange() al pin del pulsante qui
}

void loop() {
  // l'operazione lenta: lasciala così com'è
  Serial.println("working");
  delay(2000);
}
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 Temporizzazione senza delay

Esercitati da solo: Playground Arduino