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