Dnes si řekneme něco o sériovém monitoru. Arduino když pracuje, tak existuje možnost, díky které Arduino zpět počítači, ke kterému je připojeno po seriové lince posílá nejrůznější informace. Tyto informace mohou být buď hodnoty z nějakého čidla či čidel, informace o tom, jestli je dané relé sepnuté či konkrétní dioda svítí a mnoho dalšího. V podstatě tomu, co je možné přes sériovou linku zobrazit, se moc meze nekladou… Důležité však je to, aby data byla písmena či čísla popřípadě další zástupné znaky. Není možné takto posílat třeba obraz, nebo alespoň jsem zatím nepřišel na to jak.
Práce se sériovou linkou je velmi jednoduchá. Stačí na to pouze to, že ve funkci setup() řekneme, že chceme používat sériovou komunikaci a ve funkci loop odesíláme nějaké data anebo reagujeme na nějakou akci uživatele. Obsah funkce setup bude vypadat třeba takto:
Serial.begin(9600);
Hodnota 9600 baudů je rychlost, kterou bude Arduino komunikovat s PC. Možná to někoho překvapí, a také málokdo to ví, ale RS-232C je relativně dlouho přežívající způsob komunikace, který vznikl někdy okolo roku 1969 a ještě dnes je možné jej nalézt i u nových PC. Když pomineme tedy notebooky, tablety atd. Tak ještě mnoho desek má devíti-pinový konektor dodnes. Nicméně jej dnes snad nikdo nepoužívá a tak postupně vymírá. RS-232 komunikuje pomocí rámců, každý rámec má určitý počet bitů o kterém si řekneme později. Vše začíná tím, že je linka v klidovém stavu, který se značí jako IDLE a pro ten se používá kladné napětí. Každý rámec musí začínat tzv. start bitem, což je změna napětí, tedy z kladného na záporné a to na dobu danou rychlostí komunikace. My jsme v kódu použili hodnotu 9600, což znamená přenosovou rychlost 9600 baudů, tedy 1/9600s. Po tomto start bitu následují datové bity, kdy logická jednička odpovídá zápornému napětí, resp. logická nula odpovídá kladnému napětí. Nakonec je celý rámec zakončen stop bitem, který linku vrátí tam, kde byla na začátku, tedy na kladné napětí. Po tomto stop bitu může následovat buď další start bit anebo může být linka v klidovém stavu.
Když řekneme tedy rychlost 9600 badů, znamená to 9600/10 = 960 bajtů, číslo deset znamená, že se jedná o rámec, který má deset bitů, tedy jeden start bit, jeden stop bit a osm bitů se používá pro data. Ale teď už dost, toto nás stejně v podstatě zajímat nemusí, protože všechny tyto věci za nás řeší IDE Arduina. Pokud nastavíte hodnotu na 9600 a pustíte seriový monitor, musíte používat také hodnotu 9600 baudů. Nicméně pokud by vás zajímalo jak to přesně s tímto je, v diskusi pod tímto dílem se vám budu rád věnovat.
Tímto tedy máme funkci setup() a nyní se pojďme podívat na obsah funkce loop. Pokud chceme, aby nám Arduino vypisovalo jen třeba jedno slovo pořád dokola, stačí do funkce loop() vložit následující kód:
Serial.print("Hello World");
a nebo
Serial.println("Hello World");
Pokud chceme, aby to rovnou za tím udělalo enter, tedy jen Serial.print, se používá když chce údaj vypsat na tom samém řádku, Serial.println pokud chcete udělat enter. Nyní si uděláme jednoduchou funkci, protože výpis hodnot nění nic světoborného. Budeme se pokoušet o to, aby Arduino reagovalo na to, co my budeme v seriovém monitoru dělat. Vytvoříme si tedy například funkci odpovez() která bude vypadat takto:
void odpovez(String vstup)
{
if (vstup == "116"){
Serial.println("tesi me");
}else{
Serial.println("Neznám. Napis \"t\"");
}
}
A nyní do funkce loop() vložíme ještě tento kus kódu:
if (Serial.available()){
int input =Serial.read();
vstup = String(input, DEC);
odpovez(vstup);
}
Tento kus kódu nedělá ve své podstatě nic jiného, než že pokud je dostupná sériová komunikace tak ji čte a pokud zadáte nějaký znak, tak ten znak to přiřadí funkci odpověz, která v tuto chvíli nezná nic jiného než písmeno „t“. A na to reaguje, seznam písmen, jakou mají číselnou hodnotu se dá najít na internetu, ale například pro „v“ je číslo 118 atd. Vše tedy vychází z ASCII tabulky. Pro mísmeno „t“ je binární zápis 1110100, což odpovídá právě hodnotě 116. Základní tabulku jsme však pro vás připravili níže.
Tímto jste tedy zakončili sériovou komunikaci, protože je to snad již vše, co je zapotřebí k této komunikaci vědět. Příště se již podíváme na to, jak přes sériový monitor vypsat hodnoty z čidla DHT.