122
122-123_arduino_(1).indd 122
Na pytce AVT-1722
enkoder jest doczony
do wyprowadze PD0
(przycisk), PD1 i PD2
(wyprowadzenia A i B).
Prost funkcj suc do
jego obsugi pokazano na
listingu1. Ze wzgldu na
skromne zasoby pamici
mikrokontrolera, funkcja
uywa zmiennych globalnych w_lewo, w_prawo,
imp_przycisk do informowania o stanie enkodera.
Dodatkowo jest uywana
zmienna poprzedni, poniewa status enkodera jest sprawdzany
tylko wtedy, gdy poprzedni stan enkodera
rni si od biecego. Funkcja dziaa wten
sposb, e jeli wykryto obrt w prawo, to
zmienna w_prawo przyjmuje warto logiczn TRUE (1), natomiast w_lewo warto logiczn FALSE (0). W przeciwnym
kierunku obrotw zmienne maj przeciwne
wartoci. Jeli wykryto nacinicie osi, to
zmienna imp_przycisk przyjmuje warto
logiczn TRUE. W innych przypadkach
wszystkim zmiennym s nadawane wartoci FALSE. Zasada dziaania funkcji jest
bardzo prosta jeli zmieni si poziom na
wyprowadzeniu A enkodera, to jest sprawdzany poziom na wyprowadzeniu B. Jeli
na wyprowadzeniu B jest poziom niski,
to zakadam, e enkoder obraca si wlewo.
Jeli wysoki, to w prawo. Funkcja pomimo
pewnych skrtw mylowych dziaa poprawnie iwietnie radzi sobie zobsug enkodera zamocowanego na pytce. Uzbrojeni
wfunkcj obsugi enkodera moemy wzi
si za menu.
Wtym przykadzie programu menu jest
jednopoziomowe. To znaczy, e wyboru
funkcji dokonuje si na najwyszym poziomie inie ma adnych podmenu. Za pomoc tego menu wybiera si kolor wiecenia
wielokolorowej diody LED zamontowanej
obok wywietlacza. Wtym przykadzie dioda moe wieci w kolorach: czerwonym,
zielonym, niebieskim i biaym lub zosta
wyczona.
Gwnymi skadnikami menu s dwie
funkcje: jedna wywietlajca menu idruga,
wywoujca akcj po naciniciu osi. Oczywicie, mona to zrobi inaczej, jednak
przyjem tak koncepcj, aby zyska na
czytelnoci programu. Mao tego, taki rozdzia funkcji powoduje, e atwo przerobi
sposb, wjaki jest wywietlane menu, wykona np. przewijan list itp.
Za wywietlanie menu jest odpowiedzialna funkcja menu_glowne(int poz). Parametr poz informuje otym, ktra pozycja jest
aktywna. W tym przykadzie jest wywietlany odpowiedni ekran, ale mona rwnie
na bazie argumentu np. ustawia znacznik
na licie opcji. Funkcja jest nieskomplikowana i dziaa na zasadzie rozpatrywania
argumentu numer_linii w klauzuli switch
case. Naley jedynie zwrci uwag na
fakt, e pozycje menu s numerowane od
0! Dlatego, jeli chcemy skorzysta z tego
przykadu i wykona menu majce np. 3
pozycje, to funkcja bdzie rozpatrywaa argument poz wzakresie 02, natomiast staej liczba_ekranow_menu zdefiniowanej na
pocztku programu przykadowego, naley
nada warto 2.
Za podejmowanie odpowiedniej akcji
odpowiada funkcja akcja(int numer_linii).
Dziaa ona identycznie jak funkcja wywietlajca menu, jednak zajmuje si wywoaniem odpowiedniej akcji po wciniciu osi
enkodera. Co wane, przed wywoanie tej
funkcji naley poczeka na zwolnienie osi
(funkcja czekaj_na_przycisk() oczekujca
a wyprowadzenie doczone do osi bdzie
miao poziom wysoki) po to, aby unikn
wielokrotnego zadziaania wybranej opcji
menu.
O numerze pozycji w menu informuje
zmienna y_markera. Pierwotnie suya ona
do wyznaczania pozycji trjkta wskazujcego pozycj na licie istd wzia si jej nazwa. Wtym przykadzie suy ona do inforELEKTRONIKA PRAKTYCZNA 8/2013
2013-07-25 11:11:31
122-123_arduino_(1).indd 123
REKLAMA
123
2013-07-25 11:11:31