UART (Sériová linka) je komunikačné rozhranie, ktoré sa pri Arduine štandardne používa pre výpis premenných, debugging programu a slúži taktiež pre nahratie nového firmvéru. Taktiež sa toto rozhranie používa aj pre komunikáciu, napríklad dvoch Arduín, Arduina s počítačom, alebo s perifériou. UART využíva signály TX (vysielací) a RX (prijímací). Zariadenie môže používať iba jeden zo signálov, používa sa to napríklad pri perifériách typu - UART RFID čítačky RDM6300, ktorá využíva iba TX signál.
Dnes si ukážeme implementáciu komunikácie počítača s Arduinom, ktoré sú prepojené hardvérovou UART linkou Arduina. Obe zariadenia využívajú RX aj TX. Počítač bude vykonávať dopyty na Arduino, ktoré mu odpovie s výstupom. Výstup Arduina bude reportovať stavy všetkých digitálnych vývodov a analógových vstupov. V prípade Arduina Uno máme 11 digitálnych vstupno-výstupných vývodov (nerátame používané D0 a D1 pre RX a TX) a 6 analógových vstupov. Aplikácia bude schopná všetky digitálne výstupy nastavovať na hodnotu HIGH / LOW.
Výstup vo Windows programe Hercules - využitý pre komunikáciu s Arduinom
Využité príkazy pre dopyt (použitie v PC / UART monitore pre používateľský vstup):
- Input? - Vráti Output - STAVY D GPIO, (STAVY ANALÓG. VSTUPOV)
- SET HIGH - nastavenie všetkých D vývodov (výstupov) na HIGH
- SET LOW - nastavenie všetkých D vývodov (výstupov) na LOW
- SET DX HIGH - nastavenie vývodu DX na HIGH
- SET DX LOW - nastavenie vývodu DX na LOW
Program je prispôsobený pre architektúru Arduina Uno (AtMega328P), a Arduino Mega (AtMega 1280 / 2560). Programová logika tak dokáže na základe direktív nastaviť špecifické premenné, hodnoty digitálnych vstupno-výstupných vývodov (51) a analógových vstupov (17).
Program využíva aj isté informačné výstupy v prípade, že sa používateľ snaží nastaviť istú logickú úroveň pre vstup - INPUT (HIGH) / pullup vstup - INPUT_PULLUP (LOW), nakoľko digitálne vývody nastavené ako vstupy nemôžu byť ovládané funkciou digitalWrite, nereagujú na ňu.
Implementačne využíva program 3 polia, ktoré definujú skupinu, kam daný vývod patrí. Každé pole má svoje špecifikum, na ktoré sa aplikuje príslušný pinMode, ktorý obmedzí / rozšíri možnosti použitia vývodu.
Rozlišujeme:
- Výstup - OUTPUT
- Vstup - INPUT
- Vstup +5V - INPUT_PULLUP (interný pullup rezistor 20kohm zapnutý)
Ukážka spomínaných direktív pre Arduino Uno a Mega
Program i zapojenie využíva hardvérovú UART linku. Z toho dôvodu nie je možné bez odpojenia Arduina od počítača nahrať nový firmvér do Arduina, nakoľko je UART blokovaný počítačom. Program je možné upraviť aj pre virtuálnu UART linku prostredníctvom vstavanej knižnice SoftwareSerial, ktorá nebude blokovať fyzickú UART linku, prídete však v programe o ďalšie 2 ovládateľné GPIO výstupy, respektíve vstupy podľa priradenia do príslušného poľa.
Pre používateľský vstup môžete využiť COM port Arduina otvorený priamo v Serial monitore dostupnom v Arduino IDE, alebo prostredníctvom softvéru typu Terminal, Herkules, Putty, Hyperterminal. Aby používateľ videl, že UART komunikácia funguje a baudrate je správny ešte pred prvým odoslaným príkazom, Arduino každú sekundu vysiela reťazec "Zadajte prikaz - Input? / SET D2 HIGH / SET D2 LOW / SET HIGH / SET LOW" až do momentu, kým prvý krát od spustenia príjme dáta.
Programová logika (Uno, Nano, Mega compatible): https://pastebin.com/8wxgzaud