====== UART: Posílání textu a čísel do PC ======
Vysvětlete, co znamená zkratka UART a co je to sériová komunikace a sériová linka. Jak se posílají data z Arduina do počítače (přes USB) a z počítače do Arduina? Jaké funkce k tomu používáme? Uveďte ukázkový kód, který načte text z počítače a odpoví zpátky. Které části Arduina UNO a které části Arduina Leonardo se na komunikaci podílejí?
UART je hardware, který dokáže poílat data po sériové lince libovolnou rychlostí a v různých formátech. Na arduinu jsou 3 nebo 4 piny:
GND - společné zemění
Rx - receiver
Tx - transmitter
napájení (není nutné vždy propojit)
Na arduino jsou piny 0 a 1, Rx a Tx. Vnitřně jsou propojeny s USB převodníkem.
Sériová komunikace posílá bity po jedné lince jednotlivě. Často se používá i druhá linka s hodinovým signálem, ale ta není vždy nutná.
===== Funkce =====
Na arduinu používáme objekt Serial a jeho funkce:
Serial.print (text, číslo, znak atd.); Vypíše z čipu do seriové linky.
Serial.println (text, číslo, znak atd.); Je stejný jako Serial.print, ale vypíše s odřádkováním.
Serial.read (); Vrátí kód jednoho znaku, který přišel do čipu.
Serial.readString (); Stejný jako Serial.read, ale vrátí celý řetězec textu.
Serial.parseInt (); Vrátí celé přečtené číslo.
Serial.available (); Vrátí počet znaků které přišly do čipu a čekají na přečtení.
Serial.begin (rychlost); Nastaví na začátku komunikace její rychlost (v baudech). Většinou to je 9600.
Příklad:
void setup() {
Serial.begin(9600); //nastaví rychlost komunikace
}
void loop() {
Serial.println("Nabidka:"); //vypíše nabídku s odřádkováním
Serial.println("a: pizza 99kc");
Serial.println("b: kebab 50kc");
Serial.println("c: hamburger 25kc");
Serial.println("d: cola 15kc");
Serial.println("vyberte a,b,c nebo d");
while (Serial.available() == 0); //čeká dokud nepřijdou nějaká data pro přečtení
int data = Serial.read(); //kód jednoho znaku se uloží jako "data"
if (data == 'a') {
Serial.println("Castka 99kc byla strzena z vaseho uctu, uzijte si svoji pizzu!"); //odpoví podle předchozí odpovědi
}
else if (data == 'b') {
Serial.println("Castka 50kc byla strzena z vaseho uctu, uzijte si svůj kebab!"); //odpoví podle předchozí odpovědi
}
else if (data == 'c') {
Serial.println("Castka 25kc byla strzena z vaseho uctu, uzijte si svůj hamburger!"); //odpoví podle předchozí odpovědi
}
else if (data == 'd') {
Serial.println("Castka 15kc byla strzena z vaseho uctu, uzijte si svoji colu!"); //odpoví podle předchozí odpovědi
}
Serial.println(); //vynechá jeden řádek
}
Tudor Alexandru Stoican