Obsługa przycisku za pomocą przerwania
Przerwanie działa tylko dla cyfrowych pinów 2,3.
Wykorzystanie przerwań odciąża procesor i przyspiesza program.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #define BUTTON_PIN 2 #define LED_PIN 9 //volatile to zmienne używane w przerwaniach volatile byte ledState = LOW; volatile bool change = false; void setup() { pinMode(BUTTON_PIN , INPUT); pinMode(LED_PIN,OUTPUT); //przypinanie funkcji przerwania do przycisku - RISING = tylko w momencie wciśnięcia / FALLING = w momencie puszczenia / CHANGE = w momencie zmiany attachInterrupt(digitalPinToInterrupt(BUTTON_PIN ), changeLedState, RISING); } void loop() { if(change){ digitalWrite(LED_PIN, ledState); change = false; } } //funkcja przerwania, wywoływana przez wciśnięcie przycisku void changeLedState() { //nie wolno wykonywać obciążających operacji - tylko zmiana flagi ledState = !ledState; change = true; } |