7. Wykorzystywanie UARTu jako prostego debuggera
Jeżeli nasz program jest złożony, i któryś z jego modułów nie działa, a chcielibyśmy zobaczyć co nie działa to z pomocą przychodzi nam UART. Nie będzie on co prawda działać jak debugger z prawdziwego zdarzenia, ale na pewno ułatwi nam proces debugowania programu. Jeżeli, któryś z naszych modułów nie działa to wystarczy wysłać komunikat po UART z naszą zmienną i wtedy możemy „zobaczyć” czy jej wartość pokrywa się z naszymi założeniami.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
int ledR = 9; int przycisk = 11; void setup() { pinMode(ledR, OUTPUT); pinMode(przycisk, INPUT_PULLUP); digitalWrite(ledR, LOW); } void loop() { if(digitalRead(przycisk) == 1) { digitalWrite(ledR, HIGH); delay(1000); } } |
Oczywiście jest to prosty przykład, ale chodzi tu o zastosowanie „debuggera”. Nasz program po wciśnięciu przycisku powinien zapalić diodę, ale tego nie czyni. Aby się dowiedzieć czemu to sprawdźmy czy nasz przycisk w ogóle reaguje na wciśnięcie. W tym celu na początku pętli loop wstawmy, funkcję która będzie wysłać stan przycisku.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
int ledR = 9; int przycisk = 11; void setup() { pinMode(ledR, OUTPUT); pinMode(przycisk, INPUT_PULLUP); digitalWrite(ledR, LOW); Serial.begin(9600); } void loop() { Serial.print("Aktualny stan przycisku: "); Serial.println(digitalRead(przycisk)); if(digitalRead(przycisk) == 1) { digitalWrite(ledR, HIGH); delay(1000); } } |
Po otworzeniu monitora portu szeregowego widzimy, że nasz przycisk przyjmuje stan 1, a po wciśnięciu stan 0. Zatem musimy zmienić w funkcji warunkowej, stan który wyzwala przycisk na 0.

Oczywiście jest wiele sposób na wykorzystanie UART, to jest jeden z wielu, który z pewnością się przyda.
8. Obsługa dwóch lub więcej interfejsów UART (tylko Ardunio MEGA 2560)
W tym rozdziale pokażę jak obsługiwać UART, jeżeli nasze Ardunio ma więcej niż jedno. Wszystko polega na tym, aby w do Serial dopisywać numery portów.
Przykład:
|
1 2 3 4 |
Serial.. //UART0 podstawowy do komunikacji Arduino <-> PC Serial1.. //dodatkowy UART1 Serial2.. //dodatkowy UART2 Serial3.. //dodatkowy UART3 |
Napiszmy zatem prosty program, który przy pomocy UART0 będzie odbierać dane, a przy pomocy UART1 wysyłał do urządzenia docelowego.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void setup() { Serial.begin(9600); // prędkość UART0 Serial1.begin(250000); // prędkość UART1 } void loop() { if( Serial.available() > 0) // obiór danych z UART0 { char dane = Serial.read(); Serial1.println(dane); // wyślij dane przez UART1 } } |
Na początku musimy zdefiniować prędkości dla obu portów UART, ja u siebie zrobiłem tak, że port odbiorczy ma prędkość 9600 baud, a port, którym będziemy wysłać dane do urządzenia docelowego ma 250000 baud. Następnie definiujemy odbiór danych z portu 0 oraz przypisujemy temu portowi zmienną „dane”. Teraz te otrzymane dane wysyłamy portem 1. Jak widać jest to bardzo proste rozwiązanie, tylko trzeba pamiętać w których miejscach wstawiamy odpowiednie nr portów, żeby się potem nie pogubić ;) Efekt końcowy powinien być jak na filmie poniżej. Po lewej stronie jest monitor portu 0, do którego będziemy wysłać dane z komputera, a po prawej stronie jest okno terminala urządzenia odbiorczego podłączonego do portu 1.
Na tym skończymy dzisiejszą część odnośnie obsługi interfejsu UART. Mam nadzieję, że rozwiałem wszelkie wątpliwości. Jeżeli masz z czymś problem, bądź pytania to zadawaj je śmiało w komentarzach.
kody oraz schematy do tej części kursu:
Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )