[Kurs] Programowanie w C/C++ (Arduino) #3

W poprzednim artykule omówiliśmy podstawy języka C, czyli: strukturę programu, komentarze, funkcje, zmienne i pierwszy program. Dzisiaj zajmiemy się czymś, co, według mnie jest trochę bardziej ciekawe – bezpośrednią interakcją z Arduino. Wykorzystamy do tego wbudowany interfejs szeregowy: UART. W tej części dowiecie się czym jest, do czego służy i jak z niego korzystać.

poprzednia część  «-» kolejna część ⇒

>>> Kursy www.MechatroBot.pl <<<

UART – wstęp i kilka informacji

UART to układ wbudowany w Arduino, pozwalający na bardzo proste (łatwe) przesyłanie danych. Aby z niego korzystać, musimy skupić się na dwóch pinach/złączach etc., mianowicie: TX oraz RX.

W tym rodzaju transmisji pojawia się jeszcze jedna ważna sprawa, mianowicie prędkość przesyłu danych, czyli baud-rate. Najczęstsze wartości to: 9600, a także 115200. Dla nas najważniejsza jest pierwsza prędkość (9600). Aby wszystko przebiegało prawidłowo, w obu układach musi być ustawiona ta sama prędkość.

Jeżeli zamierzamy komunikować się z komputerem (Arduino <-> Komputer) będziemy musieli skorzystać z konwertera UART <-> USB. Na szczęście w naszej płytce takie urządzenie już się znajduje, więc wystarczy nam tylko zwykły kabel (USB A – USB B), ten sam, który używamy do wgrywania programu! Co za tym idzie, nie musimy nawet używać pinów 1 oraz 0.

Przykładowy konwerter USB-UART
Przykładowy konwerter USB-UART

Skoro znamy już podstawy tego interfejsu, spróbujmy z niego skorzystać!

baner11

Korzystanie z UART w praktyce

Aby rozpocząć praktyczne wykorzystywanie portu szeregowego, musimy zaopatrzyć się w kilka urządzeń. Poniżej prezentuję dwa różne sposoby na użycie UART’a. Do pierwszego programu nie będzie potrzebne nam zupełnie nic, natomiast w drugim przykładzie użyjemy serwomechanizmu.

Jest jeszcze jedna ważna kwestia. Co na po UART i wysyłaniu danych skoro nie mamy jak ich odbierać. Na szczęście z pomocą znów przychodzi Arduino a dokładnie opcja w Arduino IDE: Monitor portu szeregowego. Aby go uruchomić klikamy w ikonę po prawej u góry, a następnie sprawdzamy czy mamy ustawioną odpowiednią prędkość (9600). W okienku, które właśnie włączyliśmy wyświetlać się będzie wszystko, co przyjdzie do naszego komputera z Arduino. Teraz gdy wiemy już jak odczytywać dane, nauczmy się je wysyłać.

Opcja 1 (bez dodatkowych elementów)

Nie będę tutaj opisywał tego programu, a po prostu dodam obszerne komentarze tak aby każdy zrozumiał co, gdzie i dla czego ma się znaleźć.

String imie = ""; //Zmienna, która będzie przechowywała odebrane dane
 
void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji i ustawienie odpowiedniej prędkości
 Serial.println("Witaj! Wpisz swoje imie aby zaczac..."); //Wyświetla "Witaj..."
}
 
void loop() {
 if(Serial.available() > 0) { //Sprawdzanie czy zostały wysłane jakieś dane
 imie = Serial.readStringUntil('\n'); //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej imię (bez polskich znaków)
 Serial.println("Witaj " + imie + "!"); //Wyświetla "Witaj imię!"
 Serial.println("----------------------------"); // Rozdziela tekst
 Serial.println("Program bedzie sie powtarzal za kazdym razem gdy wpiszesz nowe imie!");
 Serial.println(); //Pusta linijka (="enter")
 }
}

Omówmy trochę ten króciutki program. Zacznijmy od początku:

String imie = ""; //Zmienna, która będzie przechowywała odebrane dane

Wpierw definiujemy zmienną (String – to jest typ zmiennej, tak samo jak: int, char itp) „imie”.

void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji i ustawienie odpowiedniej prędkości
 Serial.println("Witaj! Wpisz swoje imie aby zaczac..."); //Wyświetla "Witaj..."
}

W sekwencji startowej uruchamiamy połączenie poprzez Serial.begin(prędkość), a następnie wpisujemy tekst, który pojawi się tylko raz na początku programu. 

if(Serial.available() > 0) { //Sprawdzanie czy zostały wysłane jakieś dane
 imie = Serial.readStringUntil('\n'); //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej imię (bez polskich znaków)

Sprawdzamy czy zostały wysłane/odebrane jakiekolwiek dane, sprawdzając czy są większe niż „0”. Jeżeli coś pojawiło się na linii wejściowej, jest to zapisywane do zmiennej „imie”.

Serial.println("Witaj " + imie + "!"); //Wyświetla "Witaj imię!"

Serial.println() pozwala nam wyświetlać (wysyłać) różne informacje. Dodatek ln (Serial.println) wyświetla tekst w nowym wierszu. W nawiasie możemy umieścić jakąś zmienną np. Serial.println(imie); lub tekst napisany wcześniej. Wtedy należy użyć cudzysłowia: Serial.println(„Witaj”).

Spróbujmy teraz posterować serwomechanizmem, używając monitora portu szeregowego.


 

Opcja 2 (sterowanie serwomechanizmem z dodatkami!)

Tym razem będzie nam potrzebny dodatkowy element serwomechanizm (dowolnej wielkości). Podłączenie jest wyjątkowo proste, aczkolwiek na wszelki wypadek udostępniam „schemat” (prosty schemat).sweep_bb

 

Wszystko podłączone? W takim razie obejrzyjmy program:

#include <SoftwareSerial.h> //importowanie biblioteki
#include <Servo.h> //importowanie biblioteki
Servo myservo; 
int pozycja1 = 10; // zmienna z pozycją nr 1
int pozycja2 = 60; // zmienna z pozycją nr 2
int pozycja3 = 90; // zmienna z pozycją nr 3 
int serwo = 7; // zmienne z pinem serwa - pin 7
int data; // zmienna, w której przechowujemy odebrane dane

void setup() {
 myservo.attach(serwo); //ustawienie pinu serwa na 7 (int serwo = 7;)
 Serial.begin(9600); // ustawienie odpowiedniej prędkości 
 Serial.println("System sterowania serwomechanizmem uruchomiony! Wpisz: 1, 6 lub 9 aby zminic pozycje ramion serwa."); // wypisanie zdania w monitorze serial portu
}

void loop() {
 if (Serial.available() > 0) { 
 data=Serial.read(); // odczytane dane = data
 if(data=='1'){ // jeżeli odczyta 1
 myservo.write(pozycja1); // ustawienie pozycji serwa na "pozycja1"
 Serial.println("Pozycja 10'"); // wypisanie zdania
 }
 if(data=='6'){
 myservo.write(pozycja2);
 Serial.println("Pozycja 60'");
 }
 if(data=='9'){
 myservo.write(pozycja3);
 Serial.println("Pozycja 90'");
 }
 }
 delay(100); //oczekiwanie na kolejne dane...
}

Tego programu omawiać już nie będę ponieważ, wydaje mi się, że wszystko powinno być zrozumiałe. Jeżeli nie jest, piszcie pytania w komentarzach! 🙂

baner11

Podsumowanie

Podsumowując: dzisiaj dowiedzieliśmy się czym jest i jak używać UART w Arduino. Dzielcie się swoimi przemyśleniami, doświadczeniami oraz uwagami w komentarzach – to bardzo motywuje 😀

Oczywiście nie jest to ostatnia część tej serii. szykuję jeszcze kilka, tak więc wyczekujcie. W najbliższym artykule postaram się omówić bardziej skomplikowane programy i spróbujemy stworzyć co na prawdę „niezłego”! 🙂

poprzednia część  «-» kolejna część ⇒

>>> Kursy www.MechatroBot.pl <<<

 

Karol Wojsław

Karol Wojsław -- licealista, założyciel i redaktor Mechatrobot.pl. Interesuje się robotyką i elektroniką oraz informatyką. Z racji swojego wieku nie ma ogromnej wiedzy, ale wytrwale dąży do tego, aby artykuły, które publikuje były coraz lepsze.