arduino
avbrott
Sök…
Syntax
digitalPinToInterrupt (stift); // konverterar en pin-id till ett interrupt-id, för användning med
attachInterrupt()
ochdetachInterrupt()
.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.