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