Zoeken…


Syntaxis

  • digitalPinToInterrupt (pen); // converteert een pin-ID naar een interrupt-ID, voor gebruik met attachInterrupt() en detachInterrupt() .

  • attachInterrupt (digitalPinToInterrupt (pin), ISR, modus); // aanbevolen

  • attachInterrupt (onderbreken, ISR, modus); // niet aangeraden

  • detachInterrupt (digitalPinToInterrupt (pen));

  • detachInterrupt (interrupt);

  • noInterrupts (); // schakelt interrupts uit

  • interrupts (); // schakel interrupts opnieuw in nadat noInterrupts() is aangeroepen.

parameters

Parameter Notes
onderbreken Id van de onderbreking. Niet te verwarren met pincode.
ISR Onderbrekingsroutine. Dit is de methode die wordt uitgevoerd wanneer de onderbreking optreedt.
mode Wat zou de onderbreking moeten activeren. Een van LAAG, VERANDEREN, TOENEMEN of VALLEN. Due boards laten ook HOOG toe.

Opmerkingen

Interrupt Service Routines (ISR's) moeten zo kort mogelijk zijn, omdat ze de uitvoering van het hoofdprogramma onderbreken en dus tijdafhankelijke code kunnen verknoeien. Over het algemeen betekent dit in de ISR dat u een vlag instelt en verlaat, en in de hoofdprogrammalus controleert u de vlag en doet u wat die vlag hoort te doen.

U kunt delay() of millis() niet gebruiken in een ISR omdat die methoden zelf afhankelijk zijn van interrupts.

Onderbreken bij indrukken van knop

Dit voorbeeld gebruikt een drukknop (tact-schakelaar) bevestigd aan digitale pin 2 en GND, met behulp van een interne pull-up weerstand, zodat pin 2 HOOG is als de knop niet wordt ingedrukt.

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

Een gotcha met dit eenvoudige voorbeeld is dat drukknoppen de neiging hebben om te stuiteren, wat betekent dat bij het indrukken of loslaten, het circuit meer dan eens wordt geopend en gesloten voordat het zich in de definitieve gesloten of open toestand vestigt. Dit voorbeeld houdt daar geen rekening mee. Als gevolg hiervan kan het indrukken van de knop de LED meerdere keren schakelen, in plaats van één keer verwacht.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow