Zajęcia nr 3 – komunikacja szeregowa Arduino z PeCe-tem

Na naszych trzecich zajęciach powiedzieliśmy sobie o:

  • dalej o tablicach, bo są ważne!
  • programowanie strukturalne – tworzenie (niemych) funkcji, u nas void błysk(int czas) – jako podstawowych cegiełek, których będziemy często używać
  • poznajemy inne typy danych (czy wiesz, jakie wartości można w nich przechowywać?):
    • bajt (o rozmiarze 1 bajt – no bo niby jak inaczej!),
    • char (czyli znak, też 1 bajt) – przy tej okazji poznajemy ciapki (znaczki pojedynczego apostrofa \’ \’)
    • bool (prawda/fałsz, true/false) – 1 bajt
    • modyfikator unsigned
    • modyfikator long
    • stringi jak tablice znaków, poznajemy też psie uszy – czyli znaki amerykańskiego cytowania \” \”
    • float – do przechowywania liczb rzeczywistych, np. float pi=3.141592; (4 bajty)
  • o komunikacji szeregowej z zamierzchłych czasów PeCetowych – RS232
  • emulator portu RS232 w dzisiejszych kompach – wykorzystujemy port USB (w tym kilka zgryźliwych opinii o oprogramowaniu tego emulatora pod Windowsem – niestety, działa on słabiej niż analogiczne oprogramowanie pod Linuxa)
  • Serial.begin(9600) – rozpoczynamy transmisję szeregową z nasztm PCetem, ale „tracimy” piny #0 (nazwany RX – odbiór danych) i #1 (nazwany TX – transmisja danych) na naszej płytce Arduino (są one zajęte rozmową z PCetem). Dla bardziej dociekliwych dodam, że aby „odzyskać” te piny musimy zakończyć transmisję szeregową poleceniem Serial.end() – informacja dla zaawansowanych
  • Serial.print(„cokolwiek„)  – mówimy do PCeta, aby to usłyszeć, musimy otworzyć Monitor portu szeregowego w Arduino IDE. Trzeba pamiętać o konfiguracji Monitora tak samo, jak to zrobiliśmy od strony Arduino
  • Serial.println(„inny napis„) – napis zakończony przejściem do nowej linii
  • Serial.available() – sprawdzamy, czy są jakieś dane do odebrania przez Arduino
  • Serial.read() – czytamy jeden bajt. Przy tej okazji ćwiczyliśmy różnicę pomiędzy:
byte znak=Serial.read() // oraz

char znak=Serial.read().

Pamiętasz, o co chodziło? Co się wyświetlało w obu przypadkach po wpisaniu jednej literki, np. A? czy przypominasz sobie moją dygresję o znakach ASCII oraz o kodowaniu klawiatury?

  • wczytujemy napis (czyli ciąg znaków, np. wyraz pomidor) z Seriala – no i cóż? literka po literce?? Jak więc wczytać liczbę, powiedzmy 107?
  • Serial.parseInt() jako funkcja czytająca dane nadchodzące do Seriala i zamieniające je na liczbę całkowitą (integer) – czyli wczytując liczbę „107” nie mamy już trzech oddzielnych liczb (tj. 1, 0 i 7) tylko całą liczbę 107

Po tych zajęciach powinieneś znać:

  • umieć rozpoczynać komunikację PCta z Arduino przy pomocy obiektu Serial.begin(szybkość_transmisji)
  • pamiętać o roli pinów RX (#0) i TX (#1) w komunikacji szeregowej UART
  • znać podstawowe funkcje – przynajmniej Serial.println(„cokolwiek„)
  • umieć czytać znaki z klawiatury PCta, a także zamieniać te znaki na liczby

Praca domowa #1

Arduino + LEDy: wczytać numer diody, która ma się zaświecić (podpowiedź: pamiętajmy o ciapkach, czyli '1′, '2′ itd). Dodatkowo: jeśli dioda juz była włączona, to ją zgasić (podpowiedź: użyjmy pomocniczych zmiennych typu bool).

Praca domowa #2

Arduino + LEDy: wczytac liczbę błysków dla wszystkich diód, czyli ile razy mają błysnąć LEDy (a potem nic ma się nie dziać). Podpowiedź: wykorzystać funkcję zamieniającą wczytane znaki na liczbę całkowitą.

A co na kolejnych zajęciach?

wyświetlacz 7-mio segmentowy! a może nawet rejest przesuwny?

 

Posted in TalentyXXIw.