Ricerca…


Sintassi

  • digitalPinToInterrupt (pin); // converte un id pin in un ID di interrupt, da utilizzare con attachInterrupt() e detachInterrupt() .

  • 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow