Teraz sprawmy aby nasza dioda mrygała. Tutaj sprawa się lekko komplikuje, bo nie możemy dodać -jak to było w przypadku Arduino- opóźnień czasowych (przynajmniej nie w tak prostej formie). Musimy mądrze napisać funkcję warunkową, która będzie sprawdzać stan pinu. Następnie, jeżeli stan jest wysoki (led zgaszony) to zapal diodę (podaj stan niski na pin), w przeciwnym wypadku (else) zgaś diodę (podaj stan wysoki).
Kolejna ważna sprawa. Programując AVR (nie ważne czy w Arduino czy w zwykłym AVR-GCC) zawsze mieliśmy pętlę główną programu. Tutaj nie mamy czegoś takiego. Tutaj musimy utworzyć klasę, która to będzie wykonywana w określony sposób. Lecz ta klasa nie będzie wykonywać się cały czas, tylko zostanie wykonana raz i program się kończy.
Wcześniej wspominałem, że w Lua nie możemy sterować przy pomocy opóźnień czasowych. Tutaj sterujemy przerwaniami timera. Może brzmi to groźnie, ale jak zaraz się przekonasz jest to proste.
Podsumowując:
- Tworzymy klasę dla naszego programu
- Tworzymy funkcję warunkową wykonującą mryganie
- Dodajemy przerwania Timera, aby nasza funkcja była wykonywana.
Klasę tworzymy przy pomocy function():
|
1 2 3 4 5 |
function mryganie() --utworzyliśmy klasę o nazwie mryganie --nasz wspaniały program end |
Od tego momentu wszystko co zapiszemy pomiędzy function, a end będzie zawarte w tej klasie.
Teraz musimy stworzyć funkcje warunkową:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if warunek == wartość then --wykonaj program jeżeli warunek został spełniony else --wykonaj ten program jeżeli warunek nie został spełniony end --zakończ funkcję Dostępne znaki: == równy > większy < mniejszy >= większy bądź równy <= mniejszy bądź równy |
Jak widzimy nasza funkcja musi sprawdzić jakiś warunek. W naszym przypadku musi sprawdzić stan na pinie. Do sprawdzenia stanu na pinie wykorzystujemy funkcję gpio.read():
|
1 2 3 |
gpio.read(nr_pinu) nr_pinu - nr pinu, którego chcemy sprawdzić stan |
Pozostało nam tylko dodać obsługę Timera:
|
1 2 3 4 5 6 7 8 9 10 11 |
tmr.alarm(id_timera, czas, tryb, funkcja) id_timera- podajemy, który timer chcemy wykorzystać z zakresu 0-6 czas- podajemy, interwał czasowy w milisekundach z jakim ma być uruchamiane przerwanie tryb- wybieramy tryb timera: * tmr.ALARM_SINGLE - przerwanie zostanie wykonane tylko raz * tmr.ALARM_SEMI - przerwanie wykonywane ręcznie (przy pomocy tmr.start() ) * tmr.ALARM_AUTO - automatycznie wykonujące się przerwanie funckja- podajemy nazwę funkcji do jakiej ma się odwoływać timer |
Uff… może wygląda to groźnie na pierwszy rzut, ale jak sam po próbujesz pisać program to szybko załapiesz ;)
Gdy jesteśmy już przygotowani to możemy napisać ten program:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
gpio.mode(3, gpio.OUTPUT) -- GPIO.0 jako wyjście function mryganie() -- tworzymy klasę mryganie if gpio.read(3) == 1 then -- jeżeli stan na GPIO.0 jest 1 to: gpio.write(3, gpio.LOW) -- zapal diodę else --jeżeli stan na GPIO.0 jest 0 to: gpio.write(3, gpio.HIGH) -- zgaś diodę end --zakończ if end --zakończ klasę tmr.alarm(0, 1000, tmr.ALARM_AUTO, mryganie) |
Jeżeli masz bystre oko to pewnie zauważyłeś, że w Lua do komentowania używamy dwóch myślników, a nie jak w innych języka slasha.
W efekcie nasz program powinien działać tak:

Podsumowanie
Po dzisiejszej obszernej lekcji powinieneś umieć:
- poruszać się po środowisku ESPlora
- umieć podłączyć ESP-01 do emulatora portu COM
- napisać program wysyłający tekst po przez UART, zapalać diodę oraz wykonywać funkcję mrygania diodą
Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )