Poznajemy biblioteki - przerwania

Wśród podstawowego zestawu bibliotek na pewno znajdziemy TimerOne – bibliotekę uruchamiającą przerwania. Jest to rzecz prosta, a niezwykle przydatna. Czym są w ogóle przerwania? Jak sama nazwa wskazuje, to proces przerywający wykonywanie programu i przekierowujący wątek we wcześniej wybrane miejsce. Proces ten może być inicjowany różnymi wydarzeniami: pojawieniem się napięcia w wybranym miejscu, zakończeniem jakiegoś procesu (na przykład wysyłania komunikatu) czy – i w tym wypadku TimerOne jest przydatny – odliczeniem pewnego przedziału czasu.
Naturalnym więc będzie wykorzystanie tej biblioteki do utworzenia bloku czynności cyklicznie powtarzających się, przede wszystkim różnego rodzaju zegarów czy sterowań wyświetlaczami, które muszą być odświeżane w równych odstępach czasu. Przykład takiego rozwiązania opisałem w cyklu artykułów o budowie budzika.
Jak się obsługuje bibliotekę TimerOne? Najprościej – należy ją dołączyć do projektu, a w sekcji setup dopisać wartość czasu wywołującego przerwanie oraz adres, w który program zostanie przekierowany.
#include <TimerOne.h> // Biblioteka obsługi przerwań.
void setup() {
Timer1.initialize(1000000); // Ustaw licznik na sekundę.
Timer1.attachInterrupt(przerwanie); // Włącz przerwanie z określeniem miejsca lądowania.
}
Maksymalny czas odmierzany może wynosić ponad 8 sekund (dokładnie 8388480 mikrosekund). Minimalny – jedną mikrosekundę. Dodatkowo biblioteka może generować sygnał PWM na pinie 9 lub 10 z dokładnością dziesięciobitową jak również zawieszać swoje działanie. Przy pisaniu przerwań należy pamiętać o tym, by kod wykonujący się podczas trwania przerwania zmieścił się w ramce czasowej, zostawiając rezerwy dla reszty programu. O metodzie obliczania tych rezerw pisałem w wymienionej wcześniej serii artykułów.