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 daHIGHaLOW(con una resistenza di pull-up, una pressione)RISING: il pin passa daLOWaHIGH(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);Sfida
FacileIl 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:LOWaccende il LED,HIGHlo spegne - collega
onChange()al pin del pulsante conCHANGE
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);
}
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