arduino
interrupt
Ricerca…
Sintassi
digitalPinToInterrupt (pin); // converte un id pin in un ID di interrupt, da utilizzare con
attachInterrupt()
edetachInterrupt()
.attachInterrupt (modalità DigitalPinToInterrupt (pin), ISR,); // consigliato
attachInterrupt (interrupt, ISR, modalità); // non consigliato
detachInterrupt (digitalPinToInterrupt (pin));
detachInterrupt (interrupt);
noInterrupts (); // disabilita gli interrupt
interrupt (); // riattiva gli interrupt dopo che
noInterrupts()
è stato chiamato.
Parametri
Parametro | Gli appunti |
---|---|
interrompere | Id dell'interrupt. Da non confondere con il numero pin. |
ISR | Interrompere la routine di servizio. Questo è il metodo che verrà eseguito quando si verifica l'interruzione. |
modalità | Cosa dovrebbe causare l'interruzione di trigger. Uno di LOW, CHANGE, RISING, o FALLING. Le schede dovute consentono anche ALTO. |
Osservazioni
Le routine di servizio di interruzione (ISR) dovrebbero essere il più brevi possibile, in quanto interrompono l'esecuzione del programma principale e possono quindi rovinare il codice dipendente dal tempo. In generale questo significa che nell'ISR si imposta una flag e si esce, e nel ciclo del programma principale si controlla la flag e si fa ciò che si suppone che tale flag faccia.
Non è possibile utilizzare delay()
o millis()
in un ISR poiché tali metodi si basano su interrupt.
Interruzione sul pulsante Premere
Questo esempio utilizza un pulsante (interruttore tattile) collegato al pin digitale 2 e GND, utilizzando un resistore di pull-up interno in modo che il pin 2 sia ALTO quando il pulsante non viene premuto.
const int LED_PIN = 13;
const int INTERRUPT_PIN = 2;
volatile bool ledState = LOW;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(INTERRUPT_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), myISR, FALLING); // trigger when button pressed, but not when released.
}
void loop() {
digitalWrite(LED_PIN, ledState);
}
void myISR() {
ledState = !ledState;
// note: LOW == false == 0, HIGH == true == 1, so inverting the boolean is the same as switching between LOW and HIGH.
}
Un semplice esempio di questo semplice esempio è che i pulsanti tendono a rimbalzare, il che significa che quando si preme o si rilascia, il circuito si apre e si chiude più di una volta prima che si stabilisca nello stato finale chiuso o aperto. Questo esempio non ne tiene conto. Di conseguenza, a volte premendo il pulsante si accende il LED più volte, anziché una sola volta.