arduino
Przerwania
Szukaj…
Składnia
digitalPinToInterrupt (pin); // konwertuje identyfikator pin na identyfikator przerwania, do użycia z
attachInterrupt()
idetachInterrupt()
.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.