====== 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