UPDATE: v současné době je program již výrazně upraven (verze 3.3). Přibyly nové příkazy a většina stávajících byla přejmenována. Příkaz EXIT po sobě před ukončením relace "uklidí", čili nastaví všechny výstupy a serva do výchozích stavů a pozic. Serva jsou přestavována postupně po jednom. O serva šlo především, aby s sebou po resetu a obnovení spojení neškubla (notabene všechna najednou). Stejný "úklid" provede i nový příkaz RESET, ale ten neukončí relaci a program normálně pokračuje.
Na piny se již neodkazuje jejich interními čísly (pořadím ve skupině), ale jejich nativními čísly. U "analogových" pinů jsou přípustná jak absolutní čísla, tak čísla s A-prefixem, např. A0=14, A7=21, apod.
Hodnotu pro PWM výstup lze zadávat jak absolutně (0-255), tak v procentech 0-100%
Níže uvedené informace jsou aktuální. Pokud se vám zobrazují staré obrázky, smažte si uložená data browseru. Na dalších úpravách se pracuje. Zvažuji možnost zvolit si, zda nahrát defaultní rozložení pinů do skupin ze zdrojáku, nebo si nadefinovat piny do jednotlivých skupin přímo z terminálu. Záleží na tom, zda nadšení vydrží:-)
Arduino Serial Control (v3.3) je program, který prostřednictvím sériového terminálu umožní ovládat a číst předem nadefinované piny Arduina. Program je primárně určen pro Arduino NANO V3 a kompatibilní typy s MCU Atmega328 (UNO R3, Pro MINI 328).
Arduino Serial Control - úvod |
Program při použití Arduina NANO umožňuje:
Jednotlivé počty vstupů a výstupů jsou však spíše teoretické, protože celkový počet využitelných pinů může u Arduina s ATMEGOU328 být max. 20! Zvláště pozor na použití pinů A6 a A7, které jsou snadno přístupné jen u Arduina NANO!
Definování pinů je velmi snadné, čísla pinů se zadávají do příslušných polí konstant na začátku zdrojáku:
// Defaultni rozvrzeni pinu do skupin:
const byte digout[] = {8, 9, 12, 13}; //digitalni vystupy
const byte digin[] = {A0, A1, A2, A3}; //digitalni vstupy
const byte intype[] = {INP, INP, INP, INP}; //typ dig. vstupu, P=pullup
const byte anin[] = {A4, A5, A6, A7}; //analogove vstupy
const byte anout[] = {5, 6, 3, 11}; //PWM vystupy (9 a 10 nepouzivat!)
const byte srvout[] = {2, 4, 7, 10}; //Servo vystupy
// {} pokud nejakou skupinu pinu nechceme
Pro každý digitální vstup lze v poli intype[ ] nastavit, zdali bude typu INPUT (IN), nebo INPUT_PULLUP (INP)
V podstatě vše je generováno dynamicky na základě konfiguračních konstant na začátku zdrojáku. Lze tak snadno přidávat i nové příkazy. Jediné, co je prozatím pevné, je max. počet parametrů v příkaze, který je omezen na 2. A také počet cifer v parametru (4). Více nebylo potřeba.
Program automaticky ověřuje:
Stavy a definice všech vstupů/výstupů jsou vypsány vždy po ustanovení spojení s terminálem a lze je také kdykoliv zobrazit příkazem INFO. V hranatých závorkách za čísly pinů je vždy jejich aktuální hodnota. Malé "p" u čísla pinu digitálního vstupu značí, že vstup je nakonfigurován jako INPUT_PULLUP. Pokud tam to "p" není, jedná se o prostý INPUT:
Arduino Serial Control - INFO |
Seznam použitelných příkazů lze kdykoliv vypsat příkazem HELP:
Arduino Serial Control - HELP (strana 1) |
Arduino Serial Control - HELP (strana 2) |
Příkazem EXIT Arduino ukončí relaci a zastaví (zacyklí) se. Před ukončením relace ale příkaz po sobě ještě "uklidí". Čili nastaví všechny výstupy a serva do výchozích stavů a pozic. Serva jsou přestavována postupně po jednom. O serva šlo především, aby s sebou po resetu a obnovení spojení neškubla (notabene všechna najednou).
Arduino Serial Control - EXIT |
Stejný "uklid" provede i příkaz RESET. Stejně jako u EXITu nastaví všechny výstupy a serva (po jednom) do výchozích stavů a pozic. Po dokončení ale není relace ukončena a program normálně pokračuje a čeká na další příkazy:
Arduino Serial Control - RESET |
Některé příkazy nevyžadují žádný parametr, jiné jeden (obvykle číslo pinu) a některé i druhý (PWM duty, poloha serva). Počty parametrů viz. HELP nebo INFO. Parametry se při zadávání oddělují mezerou a mohou mít až 4 cifry, ačkoliv v současné verzi program vyžaduje max. 3-ciferný parametr.
Na piny se odkazujeme jejich nativními čísly. U "analogových" pinů jsou přípustná jak absolutní čísla, tak čísla s A-prefixem, např. A0=14, A7=21, apod.
Hodnotu pro PWM výstup lze zadávat jak absolutně (0-255), tak v procentech 0-100%. Hodnotu pro servo je nutné zadávat vždy absolutně (0-180).
Příkazy je nutné psát velkými písmeny, ale program automaticky převádí vstupní malá písmena na velká. Ćili uživatel to nemusí řešit. K editaci příkazového řádku lze používat pouze klávesy BackSpace, ESC a ENTER, viz. odstavec o terminálových programech níže.
Příklad práce s programem:
Arduino Serial Control - práce s programem |
Arduino Serial Control - práce s programem |
Arduino Serial Control - práce s programem |
Program pochopitelně ověřuje vkládané příkazy a jejich parametry a případné chyby ihned hlásí:.
Arduino Serial Control - chybové hlášky |
Progam se ovládá pomocí klasického sériového terminálu standardu VT100 jednoduchými textovými příkazy. Já používám Hyperterminál, který byl standardní součástí Win XP, ale dá se doinstalovat i do vyšších Windows. Další možností je například RealTerm, či jiné. Pozor! Sériový monitor v Arduino IDE sice není úplně standardní sériový terminál, ale použít se dá. Jen se vpravo dole musí nastavit automatické ukončování odeslaného příkazu znakem CR (Carriage Return), viz následující screenshot:
Nastavení Serial Monitoru v Arduino IDE |
Defaultní nastavení terminálu je 1900Bd, 8N1, bez řízení toku. Nutný je samozřejmě ovladač, který USB portu s připojeným Arduinem přidělí číslo COM portu, jež se zadá do konfigurace terminálového programu:
Nastavení Hyperterminálu |
Pozor, má-li váš oblíbený terminálový program vlastní echo, je nutné toto vypnout, jinak budete mít napsané znaky na obrazovce 2x!
Při zadávání a ediaci příkazu na klasickém terminálu je možné používat pouze tyto řídící klávesy:
ENTER - odešle příkaz do Arduina
ESC - zruší zadávání a vypíše nový prompt ?:
BackSPACE - smaže poslední znak a posune kurzor vlevo. Prostě "bekspejs", no :-)
Při použití Arduino IDE Serial Monitoru jsou možnosti editace příkazového řádku pochopitelně vělší.
Otázkou je, k čemu je to dobré. Určitě jako demonstrátor. Také si to dovedu představit při prvním oživování a kontrole obvodů konstrukcí (vč. robotů) založených na Arduinu.
Příklady použití pinů:
Digitálními výstupy lze ovládat LED, žárovky, relé, DC motory (ve spolupráci s PWM výstupy lze řídit i jejich rychlost), bzučáky, apod.
PWM výstupy lze ovládat rychlost otáčení DC motorů, repráčky, apod. Působivá by zde mohla být RGB LED.
Servovýstupy lze překvapivě ovládat klasická modelářská serva :-)
Digitálními vstupy lze číst vstupy nezávisle nakonfigurované jako INPUT, nebo INPUT_PULLUP. Třeba jen obyč. tlačítka, či čidla s dig. výstupem.
Analogovými vstupy lze například číst hodnotu potenciometru, či jiných čidel s analogovým výstupem.
Takže když mladému zájemci uděláte prkénko a na něj dáte pár LEDek, relátek, tlačítek, potenciometr, DC motor ideálně s nějakým PWM driverem (L298), repráček a servo, má o zábavu postaráno a dost se toho naučí. Sice se to neovládá žádnou klikací aplikací, ale i ta by se dala doprogramovat (nemám v úmyslu).
Není snad nutné připomínat, že pro "akční členy" typu relé, motor, servo, žárovka apod. je nutné použít příslušně dimenzovaný externí napájecí zdroj a nesnažit se je napájet z USB! Ačkoliv jedno mikroservo úesbéčko utáhne:-) Z externího zdroje je pochopitelně možné napájet i to Arduino.
Myslím, že už další funkcionalitu přidávat nebudu. Ale mám pár nápadů na další vylepšení. Na začátku by mohl program dát uživateli na výběr, zdali nahrát defaultní konfiguraci pinů ze zdrojáku, nebo piny nadefinovat do skupin přímo z terminálu. Užitečná by určitě byla nějaká "klikací" ovládací aplikace pro PC, ale to už není o programování Arduina ale písíčka v nějakém vyšším jazyce. Další užitečnou věcí by mohl být jakýsi programový režim. Třeba něco ve stylu jednoduchého Basicu s číslovanými řádky. Přidalo by se pár základních klíčových slov a mohlo by to pak vypadat třeba nějak takto:
10 IF (DIN A0) THEN (DSET 8) ELSE (DRES 8)
20 LET A = AIN A7
30 IF (A > 180) THEN (A = 180)
40 SRV 10 A
50 GOTO 10
Ale to už je asi hodně velká utopie a bylo by lepší případného zájemce naučit to Arduino programovat přímo:-)
Zdroják uvolním po důkladném otestování.
Při psaní jsem opět narazil na další "poťouchlosti" Arduina, které jsem připsal do svého Arduino taháku:
Šlo zejména o to, že statické texty určené pro výpis na terminál příkazy Serial.print(ln) se defaultně neukládají do programové ROM, jak by člověk čekal, ale do datové RAM! A tak se stalo, že mi zkrátka při psaní HELPu došla paměť :-) A totéž platí i pro lcd.print pro standardní knihovnu pro LCD. Z toho, že statické texty (ale také konstanty - const) se defaultně ukládají do datové RAM jsem byl, jakožto milovník klasického MCU 8051 s jeho 128 bajty(!) RAM, opravdu v šoku! Naštěstí se to vše dá přesměrovat do ROM, ale je to práce navíc...
Tahák je nutné považovat za doplněk k referenční příručce Arduina. Jsou zde uvedeny zvláštnosti a podivnosti (slovem DavidaO "poťouchlosti"), na které jsem při tvorbě svých Arduino projektů narazil. Já vím, že už by to chtělo ty chaoticky přidávané informace v taháku nějak tematicky utřídit, ale na to není čas a vůle. Dokud se v tom sám vyznám, není co řešit:-)
Jako "odpadní" produkt jsem si napsal též vlastní Terminal ECHO, které je při tvorbě terminálových aplikací nutností. Pozor, má-li váš oblíbený terminálový program vlastní echo, je nutné toto vypnout, jinak budete mít napsané znaky na obrazovce 2x!
Hotových Arduino terminal ECHO na "3 řádky" jsou na netu tuny, ale já si to prostě potřeboval spatlat sám:-) Ten můj vypisuje ASCII kódy přijatých znaků ve všech klíčových číselných soustavách (HEX, DEC, BIN) a zarovnává čísla vpravo. Více viz. screenshoty níže:
Arduino Terminal Echo na Hyperterminálu |
Arduino Terminal Echo na Hyperterminálu |
Arduino Terminal Echo na Serial Monitoru v Arduino IDE |
Publikováno: 11/2025