Biblioteka Timers.h

Biblioteki typu Timer są wykorzystywane we wszelkich programach w których chcemy wywoływać cykliczne działania, bez używania niezwykle popularnej, ale bardzo nieprzydatnej z powodu stopowania procesora funkcji delay(). Oto jedna z nich.

ŹRÓDŁO:

Najprostsze użycie biblioteki, wywołanie funkcji co 1 sekundę

#include <Timers.h>
Timers <2> akcja;

void setup(){
   akcja.attach(0, 1000, zrob_cos_co1sek);  // inicjalizacja procesu
} 
 void loop(){
 akcja.process();  //pooling - cyklicznie wywolanie by sprawdzic czy juz czas dzialac
} 
void zrob_cos_co1sek() {
//wlasny podprogram do wykonania co 1 sek 
}

Jednokrotne wywołanie funkcji po zadanym czasie. (Źródło Arduino na dobry początek)

#include <Timers.h>
Timers <2> akcja; 

int i=1;
void setup(){
   akcja.attach(0, 0, zrob_cos_raz);  // inicjalizacja procesu
}
 void loop(){
akcja.process();  //pooling - cyklicznie wywolanie by sprawdzic czy juz czas dzialac

if (i) akcja.setInterval(0,5000); // zrob cos za 5 sek
}
void zrob_cos_raz()  {
akcja.updateInterval(0,0); //wylacz timer 
i=0;
//wlasny podprogram do wykonania jednokrotnie 
}
OPIS BIBLIOTEKI (skrócony)

pobrany ze strony:
http://forum.arduinopolska.pl/watek-biblioteka-timers-koniec-z-uciążliwym-delay?highlight=Timers.h
—————————-
Czym biblioteka Timers różni się od biblioteki Timer, TimerOne czy TimerTree? 
Przede wszystkim prostotą użycia jej w programie. Zasadniczo korzystamy z 4 wygodnych funkcji składowych klasy Timers:

1) Konstruktor – inicjalizacja obiektu klasy Timers. 
Przykład:
Timers <8> akcja; – Powołujemy do życia obiekt klasy Timers o przykładowej nazwie akcja, który może obsłużyć 8 niezależnych wątków (zdarzeń)

2) Funkcja attach(nr wątku, interwał wywołania, funkcja obsługi), gdzie:
– numer wątku, to numer jednego z 8 wcześniej zdefiniowanych w konstruktorze wątków;
– interwał – odstęp czasu w ms. W tych odstępach będzie wywoływana funkcja obsługi
– funkcja obsługi – nazwa funkcji, która ma być wykonywana.
W tym zakresie funkcja attach jest łudząco podobna do funkcji attachInterrupt.
Przykłady:
akcja.attach(2,5000,pokazTemp); – co 5 sekund wątek 3 (liczymy od 0) wywołuje funkcję pokazTemp()
akcja.attach(0, 1000, pokazCzas); – co 1 sekundę wątek pierwszy wywołuje funkcję pokazCzas()
akcja.attach(1,0,flopKierunek); – definiujemy wątek nr 2, ale nie mamy na razie zamiaru z niego korzystać – interwał =0 

UWAGA!!!
Funkcja attach musi być zainicjowana w funkcji setup() dla każdego z wątków.
Jeśli nie mamy zamiaru od razu korzystać z danego wątku, to w funkcji attach ustawiamy interwał na 0

3) Funkcja updateInterval(nr wątku, akt interwał), gdzie:
– nr wątku, to numer jednego z 8 wcześniej zdefiniowanych w konstruktorze wątków;
– akt interwał – dynamiczna zmiana czasu wywoływania funkcji, w szczególnym przypadku dla interwał=0 wyłączamy obsługę wątku.
Przykłady:
akcja.updateInterval(2,0); – zatrzymanie obsługi wątku nr 3
akcja.updateInterval(4,189); – zmiana lub ustawienie dla wątku nr 5 czasu wywoływania funkcji obsługi na 189 ms.

4) funkcja process() – wywoływana w pętli loop, uruchamia globalną obsługę wszystkich zadeklarowanych
w konstruktorze wątków
Przykład:
akcja.process();

Dodaj komentarz