Szukaj…


Składnia

  • digitalPinToInterrupt (pin); // konwertuje identyfikator pin na identyfikator przerwania, do użycia z attachInterrupt() i detachInterrupt() .

  • attachInterrupt (digitalPinToInterrupt (pin), ISR, tryb); // Zalecana

  • attachInterrupt (przerwanie, ISR, tryb); // Niepolecane

  • detachInterrupt (digitalPinToInterrupt (pin));

  • detachInterrupt (przerwanie);

  • noInterrupts (); // wyłącza przerwania

  • przerywa (); // ponownie włącza przerwania po noInterrupts() .

Parametry

Parametr Notatki
przerwać Identyfikator przerwania. Nie należy mylić numeru PIN.
ISR Przerwać procedurę serwisową. Jest to metoda, która zostanie wykonana po wystąpieniu przerwania.
tryb Co powinno spowodować uruchomienie przerwania? Jeden z NISKICH, ZMIAN, PODNOSZENIA lub UPADKU. Ze względu na płyty pozwalają również WYSOKIE.

Uwagi

Procedury obsługi przerwań (ISR) powinny być jak najkrótsze, ponieważ wstrzymują wykonywanie programu głównego i mogą w ten sposób zepsuć kod zależny od czasu. Ogólnie oznacza to, że w ISR ustawiasz flagę i wychodzisz, aw głównej pętli programu sprawdzasz flagę i robisz wszystko, co ta flaga ma zrobić.

W ISR nie można używać delay() ani millis() ponieważ te metody same polegają na przerwaniach.

Przerwanie po naciśnięciu przycisku

W tym przykładzie użyto przycisku (przełącznika taktowego) przymocowanego do cyfrowego styku 2 i GND, wykorzystującego wewnętrzny rezystor podciągający, więc styk 2 jest WYSOKI, gdy przycisk nie zostanie naciśnięty.

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

Jednym z przykładów tego prostego przykładu jest to, że przyciski mają tendencję do podskakiwania, co oznacza, że po naciśnięciu lub zwolnieniu obwód otwiera się i zamyka więcej niż jeden raz, zanim ustali się w końcowym stanie zamkniętym lub otwartym. Ten przykład tego nie bierze pod uwagę. W rezultacie czasami naciśnięcie przycisku spowoduje wielokrotne przełączanie diody LED, zamiast oczekiwanego raz.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow