Sök…


Syntax

  • digitalPinToInterrupt (stift); // konverterar en pin-id till ett interrupt-id, för användning med attachInterrupt() och detachInterrupt() .

  • attachInterrupt (digitalPinToInterrupt (pin), ISR, mode); // rekommenderas

  • attachInterrupt (interrupt, ISR, mode); // rekommenderas inte

  • detachInterrupt (digitalPinToInterrupt (stift));

  • detachInterrupt (avbrott);

  • noInterrupts (); // inaktiverar avbrott

  • avbrott (); // återaktivera avbrott efter att noInterrupts() har kallats.

parametrar

Parameter anteckningar
avbryta Id för avbrottet. Att inte ta fel med pin nummer.
ISR Avbrottsrutin. Detta är metoden som kommer att köras när avbrottet inträffar.
läge Vad bör göra att avbrottet utlöses. En av LÅG, Byt, Stig eller FALL. Förfallna brädor tillåter också HÖG.

Anmärkningar

Interrupt Service Routines (ISRs) bör vara så korta som möjligt, eftersom de pausar körning av huvudprogrammet och därmed kan skruva upp tidsberoende kod. I allmänhet betyder detta i ISR att du ställer in en flagga och lämnar, och i huvudprogramslingan kontrollerar du flaggan och gör vad flaggan är tänkt att göra.

Du kan inte använda delay() eller millis() i en ISR eftersom dessa metoder själva förlitar sig på avbrott.

Avbryt på knapptryckning

I det här exemplet används en tryckknapp (taktbrytare) ansluten till den digitala stift 2 och GND, med ett internt uppdragningsmotstånd så att stift 2 är HÖG när knappen inte trycks in.

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

En gotcha med detta enkla exempel är att tryckknappar tenderar att studsa, vilket innebär att när du trycker på eller släpper, öppnar och stängs kretsen mer än en gång innan den sätter sig i det slutliga slutna eller öppna tillståndet. Detta exempel tar inte hänsyn till det. Som ett resultat kommer ibland att trycka på knappen växla lysdioden flera gånger, istället för den förväntade en gång.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow