Skocz do zawartości

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


Pomocna odpowiedź

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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

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
Link do komentarza
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 🙂

Link do komentarza
Share on other sites

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
Link do komentarza
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

Link do komentarza
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.

 

Link do komentarza
Share on other sites

Witam,

Mam pytanie. Chciałem połączyć program licznika z programem "przeciwłamaniowym", tak aby wyświetlał liczbę wciśnieć przycisku. Udało sie. Ale gdy chciałem aby program wyswietał wartość wraz z komunikatem: "ilość wcinięć: x" gdzie x wartość licznika, pojawiał sie błąd:

exit status 1
expected primary-expression before ')' token

Zastosowałem zmodyfikowaną formułę z kolejnego zadania tzn.:    

void loop() 
{  
 if(digitalRead(Sensor_1) == LOW)
 { 
  digitalWrite(LedGreen, HIGH); //LED green ON
  digitalWrite(LedRed, LOW); // LED red OFF
  Serial.println("ilosc wcisniec: " +licznik+); //display value 'licznik'
  while (digitalRead(Sensor_1) == LOW) //wait till change
  {
  delay(25);
  }  
  }
  
 else
 {
  digitalWrite(LedGreen, LOW); // LED green OFF
  digitalWrite(LedRed, HIGH); // LED red ON
  licznik = licznik + 1; //add value 1 to 'licznik'

  while(digitalRead(Sensor_1) == HIGH) 
  {
  delay(25);
  } // wait for switch release

}

Bez wartość w " " działa poprwnie. Na czym polega błąd? Jak  

Link do komentarza
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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.