Skocz do zawartości
Komentator

Kurs Arduino - #3 - UART (komunikacja z PC), zmienne

Pomocna odpowiedź

(edytowany)

Dlaczego w przykładzie z odczytem z terminala nie mam żadnej reakcji po wysłaniu którejś literki? I w mega 2560 i w nano ten sam objaw 😞

Screenshot_207.png

Screenshot_206.png

PS. przy switch wszystko działa jak należy 

Screenshot_209.png

Edytowano przez radex324

Udostępnij ten post


Link to post
Share on other sites

Może wyświetl sobie na monitorze co zawiera odebraneDane :

Serial.println(odebraneDane);

 

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, Belferek napisał:

Może wyświetl sobie na monitorze co zawiera odebraneDane :


Serial.println(odebraneDane);

 

Tak jakby warunek if nie działał.

Screenshot_210.png

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

a jesteś pewny, że odebraneDane to tylko 1 "literka"?

Tutaj znajdziesz opis klasy String

Warto poczytać i poeksperymentować z jej metodami (funkcjami) np. co pokaże:

Serial.println(odebraneDane.length());

Zbadaj ten string (odebraneDane) i znajdziesz wyjaśnienia. Warto popatrzeć jak możemy porównać String (equals()) czy tez pobrać jego fragment.... itp.

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
2 minuty temu, Belferek napisał:

a jesteś pewny, że odebraneDane to tylko 1 "literka"?

Tutaj znajdziesz opis klasy String

Warto poczytać i poeksperymentować z jej metodami (funkcjami) np. co pokaże:


Serial.println(odebraneDane.length());

 

No pokazuje wartość 2 jak wyślę h lub o itp.

Screenshot_211.png

Co dziwne cały kod jest skopiowany z poradnika dla pewności i nie działa.

Edytowano przez radex324

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Nie mam pod ręką Arduino ale ciekawe co będzie gdy zgodnie z opisem klasy String zamiast:

if(odebraneDane=="h") ....

użyjesz (przy wyłączonym CAPSLOCK):

if(odebraneDane.equals("h")==true).....

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
10 minut temu, Belferek napisał:

Nie mam pod ręką Arduino ale ciekawe co będzie gdy zgodnie z opisem klasy String zamiast:

if(odebraneDane=="h") ....

użyjesz (przy wyłączonym CAPSLOCK):

if(odebraneDane.equals("h")==true).....

E tam, to nie Java niestety.

Cytat

Reference > Language > Variables > Data types > String > Operators > Comparison

==

[StringObject Operator]

Description

Compares two Strings for equality. The comparison is case-sensitive, meaning the String "hello" is not equal to the String "HELLO". Functionally the same as string.equals()

Po prostu zmień kodowanie końca linii, bo teraz wysyłasz \r\n (w oknie monitora portu szeregowego na dole, ta opcja "zarówno NL jak i CR")

Edytowano przez Elvis

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, Elvis napisał:

Po prostu zmień kodowanie końca linii, bo teraz wysyłasz \r\n (w oknie monitora portu szeregowego na dole, ta opcja "zarówno NL jak i CR")

Co nie znaczy, ze do zabawy ze String nie warto zapoznać się z metodami tej klasy. No i może z ciekawości radex324 dojdzie do tego czym jest ten drugi bajt, jaką ma wartość itp.

W sumie fajna zabawa z tymi Stringami 🙂

Udostępnij ten post


Link to post
Share on other sites

W sumie trochę zależy kto jest w tych stringach, ale na ogół to faktycznie fajna zabawa 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

No, a tak na poważnie to można przed tymi niedrukowalnymi  znakami jak np. CR, NL itp zabezpieczyć się za pomocą metody trim(), która te znaki usuwa i teraz:

if(Serial.available()>0) { odebraneDane = Serial.readStringUntil('\n'); odebraneDane.trim(); }
    

i powinno być OK

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites

Zwracam się do Was z prośbą o pomoc w związku z poleceniem #define. Wygląda na to, że polecenie to nie odnosi żadnego skutku - szkic pozostaje w takiej samej formie po kompilacji. Niezależnie od programu. Próbowałem z wieloma. Zrobiłem też próbę ze skopiowanym Waszym szkicem i wpisałem #define ledPin 8 jak w przykładzie. Rezultatów żadnych. Błędów też nie sygnalizuje. Załączam scrshot by pokazac cale okno z inf. po kompilacji. Jaki jest powód i rozwiązanie? 

 

Screenshot 2019-02-13 at 17.22.28.png

Udostępnij ten post


Link to post
Share on other sites

Definicja czegokolwiek nie wpływa na przebieg programu jeśli jej nie użyjesz, lecz tylko zajmuje miejsce w RAM. W loop, zamiast 8 użyj LedPIN - zdefiniowałeś, że LedPIN == 8.

Udostępnij ten post


Link to post
Share on other sites
20 minut temu, Henrykk napisał:

Definicja czegokolwiek nie wpływa na przebieg programu jeśli jej nie użyjesz, lecz tylko zajmuje miejsce w RAM. W loop, zamiast 8 użyj LedPIN - zdefiniowałeś, że LedPIN == 8.

Dzięki Henryk, opatrznie zrozumialem mechanikę tego polecenia. Teraz jest OK.

 

Udostępnij ten post


Link to post
Share on other sites
21 minut temu, Henrykk napisał:

8 użyj LedPIN

Nie takiej deklaracji kolega dokonał. Zadeklarował stałą ledPin, a to różnica.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...