Mam prosty szkic, który drukuje „Hello World” do serialu, ale zamiast tego dostaję bełkot.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
Dlaczego nie wypisuje „Hello World”, jak mówi kod?
Odpowiedzi:
Płyta i terminal prawdopodobnie nie używają tej samej prędkości transmisji. Sprawdź prawy dolny róg terminala szeregowego Arduino i upewnij się, że jest ustawiony na 9600.
Dane szeregowe
Komunikacja szeregowa polega na wysyłaniu całego strumienia danych po jednym bicie. Jest to w przeciwieństwie do standardowego portu równoległego, który wysyła jeden bajt na raz. Oba urządzenia muszą wiedzieć, z jaką prędkością wysyłane są dane. Ponadto oba urządzenia muszą działać z tą samą prędkością. Nazywa się to szybkością transmisji.
Szybkość transmisji
Baud tak naprawdę oznacza tylko liczbę impulsów na sekundę. W kontekście komunikacji szeregowej oznacza to, ile bitów jest przesyłanych na sekundę. Jedną z najczęstszych wartości jest 9600, ale są też inne, które są współczynnikami lub wielokrotnościami 9600. Nie ma to jednak znaczenia, o ile oba urządzenia działają z tą samą prędkością.
Jeśli wysyłam Ci wiadomości szybciej niż je otrzymujesz, tracisz dane. Jeśli wysyłam ci wiadomości wolniej niż je otrzymujesz, masz bzdury pomieszane z tym, co ci wysłałem.
Dane, parzystość, bity stopu
Jeśli spojrzysz na dokumentację
begin()
, zobaczysz, że może ona przyjąć dwa parametry:Mamy nadzieję, że rozumiesz teraz szybkość, to są bity na sekundę, z którymi Arduino będzie się komunikować.
Drugi parametr,
config
pozwala skonfigurować kilka innych rzeczy na temat szeregowej transmisji danych. Są to bity Data, Parzystość i Stop. Zobaczysz na stronie to wartości takie jak5N1
,6N1
iSERIAL_8N1 (the default)
Pierwsza liczba reprezentuje liczbę bitów danych. Drugi znak mówi ci, jaki jest rodzaj bitu parzystości.
E
dla parzystości parzystej,O
parzystej nieparzystej lubN
bez parzystości. Trzecia liczba mówi, ile bitów stopu.Tak naprawdę, przy 8N1 mamy 10 bitów wysyłanych na każde 8 bitów „twoich” danych. 1 bit startowy, 8 bitów danych i 1 bit stopu.
W każdym razie obie strony muszą uzgodnić te informacje, a także prędkość. Terminal szeregowy Arduino nie daje możliwości zmiany tych ustawień, ale robią to inni, więc musisz upewnić się, że wszystkie ustawienia konfiguracji są takie same.
Więcej informacji na wiki: Asynchroniczna komunikacja szeregowa
źródło
Odpowiedź Sachleen (powyżej) mówi:
Jeśli liczba ta wynosi 9600 i nadal występują zniekształcone dane, sprawdź dane wyjściowe uzyskane podczas przesyłania kodu. Powinien brzmieć:
Ta dolna linia (tego, co opublikowałem) mówi, jaka jest domyślna prędkość transmisji twojego urządzenia. Dla mnie zmieniłem
Serial.begin(9600);
->Serial.begin(57600);
i sprawdziłem, czy prawy dolny róg mojego terminalu szeregowego Arduino wskazuje 57600.Po uruchomieniu tego, i to zadziałało, byłem w stanie przełączyć się z powrotem na 9600 i uzyskać nienaruszone dane. Arduino wydaje się być wybrednym ...
źródło
Spędziłem pół godziny próbując rozwiązać ten problem, a to mój Arduino Pro Mini miał 3,3 V i wybrałem 5 V w Arduino IDE (na PC). Druk seryjny nigdy tak nie działa, nawet przy takiej samej szybkości transmisji.
Wybierz odpowiednią płytkę w Arduino IDE.
Aby było jasne, należy wybrać prawidłowy procesor (napięcie / prędkość zegara) w zakładce Narzędzia .
źródło