You are on page 1of 2

NOTATNIK KONSTRUKTORA

Klocki dla Arduino (1)

Procedury obsugi wybranych moduw


dodatkowych dla Arduino impulsator
Arduino jest nie tylko wietn
platform prototypow.
Ogromy wybr moduw
dodatkowych umoliwia
budowanie funkcjonalnych
urzdze. Unika si przy tym
koniecznoci zaprojektowania
pytki drukowanej i jej montau.
W artykule prezentujemy
kilka klockw, z ktrych
mona poskada funkcjonalne
urzdzenia oraz metody ich
obsugi programowej.
Wakacje s wietn okazj, aby zapozna si ze rodowiskiem programistycznym Arduino. Klocki oferowane
przez wielu niezalenych producentw
oraz dostpne w Internecie, pozwalaj na
szybkie wykonanie zegara, woltomierza,
ukadu sterujcego i wielu, wielu innych.
Przyjrzyjmy si przykadom programw
wykonanych dla Arduino Duemilanove
oraz moduw opisywanych wElektronice
Praktycznej.

Menu obsugiwane za pomoc


enkodera
Wiele nowoczesnych urzdze ma
menu wywietlane na ekranie LCD iobsugiwane za pomoc enkodera obrotowego
o maej rozdzielczoci, czasami nazywanego impulsatorem. Z takiego enkodera s
wyprowadzone dwa przebiegi przesunite
w fazie o 90 stopni oraz zestyki przycisku
zintegrowanego zosi. Oprcz pytki bazowej, w tym przykadzie uyjemy moduu
AVT-1722 majcego zamontowany wywietlacz LCD 28 znakw, 4 przyciski, przycisk
zerowania, przekanik oraz impulsator.
W zwizku z niewielk liczb znakw
mieszczc si na wywietlaczu przyjmijmy, e pojedyncza pozycja menu bdzie
wywietlana na caym ekranie. Obrt enkodera w prawo lub w lewo bdzie powodowa przejcie do kolejnej (w prawo) lub
poprzedniej (wlewo) pozycji menu. Wybr
bdzie zatwierdzany za pomoc nacinicia osi enkodera. Po jego dokonaniu bdzie
wywietlany nastpny poziom menu lub
wywoywana funkcja urzdzenia. Wykonanie menu rozpoczniemy od funkcji obsugi
enkodera.

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

mowania o numerze Listing 1. Funkcja obsugi enkodera


void odczyt_impulsatora()
aktywnego ekranu. {
boolean imp_pin1, imp_pin2, biezacy;
Zmienna jest zwikunsigned int i = 0;
szana przy obrocie //odczyt stanu przycisku enkodera
imp_przycisk = w_prawo = w_lewo = LOW;
w prawo i zmniejimp_pin1 = digitalRead(pd0);
if(imp_pin1 == LOW)
sza na przy obrocie
{
w lewo. W wypadku
delay(50);
imp_pin1 = digitalRead(pd0);
przekroczenia wartoif(imp_pin1 == LOW) imp_przycisk = HIGH;
ci maksymalnej jest
else imp_przycisk = LOW;
}
zerowana, natomiast
//odczyt kierunku obrotu
imp_pin1 = digitalRead(pd1);
po
przekroczeniu
if(imp_pin1 == LOW) biezacy = HIGH; else biezacy = LOW;
0 jest jej nadawana
if(poprzedni != biezacy)
{
warto maksymalpoprzedni = biezacy;
na. Odczyt impulsaif(imp_pin1 == LOW)
{
tora i manipulacja
imp_pin2 = digitalRead(pd2);
zmienn
y_markeif(imp_pin2 == LOW)
{
ra s wykonywane
w_lewo = HIGH;
w_prawo = LOW;
w ptli gwnej pro}
gramu void loop().
else
{
W zasadzie, za
w_lewo = LOW;
wyjtkiem
obsugi
w_prawo = HIGH;
}
enkodera, przykad
}
nie wymaga obszer}
}
nego
komentarza.
Kompletny kod rdowy przykadu przygotowany dla Arduino
wartoci jest moliwa po naciniciu osi.
Duemilanove jest zamieszczony wmateriaWwczas kolor wiecenia diody zmienia
ach dodatkowych.
si na niebieski, a parametr mona zmienia krcc w prawo lub w lewo. Czasy
zmieniaj si zrozdzielczoci 10 ms, naGenerator zmenu obsugiwanym
tomiast liczba impulsw z dokadnoci
enkoderem
do pojedynczego impulsu. Tymczasowe
Opisan wczeniej funkcj obsugi
zatwierdzenie nastawy nastpuje po nacienkodera zastosujemy w przykadowym
niciu osi (zmiana koloru wiecenia diody
generatorze. Generator bdzie wykonywa
na czerwony), natomiast zapamitanie
zaprogramowan liczb cykli polegajwszystkich nastaw wymaga wyboru OK
cych na zwarciu przekanika na ustawioz menu. Wybranie Anuluj powoduje
ny czas, co ustawiany odstp czasu. Ustaprzywrcenie starych wartoci. Po wybrawione parametry generatora zapamitamy
niu URUCHOM GENER. kolor wiecenia
w pamici nieulotnej i odtworzymy po
diody LED zmienia si na zielony inastwczeniu zasilania.
puje uruchomienie funkcji generujcej
Przykad programu otakiej funkcjonalimpulsy. Na ekranie LCD jest wywietlana
noci zapamitano w pliku Generator_z_
liczba cykli pozostaych do zatrzymania
przekaznikiem.ino. Jego parametry grasi. Sycha przy tym przeczajce si
niczne s nastpujce:
liczba impulsw od 1 do 10000,
styki przekanika oraz wida cykliczne
czas trwania impulsu od 100 ms do
zawiecanie si igaszenie diody LED2. Po
10s,
zakoczeniu generowania impulsw sty odstp pomidzy impulsami od
ki s ustawiane w pozycji spoczynkowej,
100ms do 10s.
dioda LED2 ganie, aLED1 zmienia kolor
Maksymalne iminimalne wartoci nawiecenia na czerwony. Przyciski zamonstaw s zapisane na pocztku programu,
towane pod wywietlaczem nie s uywapo dyrektywie #define. Mona je zmieni
ne. Do zatrzymania generatora moe powprzemylany sposb.
suy przycisk Reset zamontowany jako
pierwszy od lewej (najbliej rogu pytki).
Po zaczeniu generatora dioda LED
wieci si w kolorze czerwonym, a na
ekranie pojawia si moliwo wyboru
Podsumowanie
opcji URUCHOM GENER. (przez naProgram rdowy jest przykadem
cinicie osi enkodera), po ktrej to jest
zastosowania AVT1722 i AVT5272 i moe
wywoywana funkcja generujca impulby dowolnie wykorzystywany imodyfikosy. Po przekrceniu osi enkodera wprawo
wany na zasadach licencji GPL. Analizulub w lewo na ekranie pojawia si opcja
jc jego kod mona znale odpowiedzi na
PARAMETRY umoliwiajca ustawiepytania odnonie do sposobu odmierzania
nie parametrw generatora. Pomidzy poczasu, sterowania przekanikiem czy diod
szczeglnymi pozycjami przechodzi si
LED.
obracajc o enkodera, natomiast zmiana
Jacek Bogusz, EP
ELEKTRONIKA PRAKTYCZNA 8/2013

122-123_arduino_(1).indd 123

REKLAMA

Klocki dla Arduino

123

2013-07-25 11:11:31

You might also like