Skocz do zawartości

Problem z monitorem szeregowym.


Danielos01

Pomocna odpowiedź

Witam, ostatnio znowu zacząłem bawić się Arduino Uno i chciałem przypomnieć sobie przesyłanie danych przy pomocy monitora szeregowego.

Napisałem krótki kod w którym w zależności od wpisanej cyfry dodawana jest do niej cyfra 3 i wyświetla się wynik. O to kod:

 int b=3;
 int c ;

void setup() {
 Serial.begin(9600);
 Serial.println("Wybierz cyfre");
}

void loop() {
 if(Serial.available()>0){
   char a=Serial.read();

   Serial.print("Twoja cyfra to ");
   Serial.println(a);

   c=a+b;
   Serial.print("Wynik to ");
   Serial.println(c);
   delay(1000);
 }

}

Jednak po wpisaniu jakieś cyfry w monitorze wyświetla się wszystko poprawnie do momentu wyniku(pojawia się jakaś duża liczba, niezgodna) i dodatkowo wyświetla się kolejne linijki po mimo wpisywania cyfry.

W skrócie wpisałem cyfrę 1 a w monitorze mam coś takiego:

Wybierz cyfre

Twoja cyfra to 1

Wynik to 52

Twoja cyfra to

Wynik to 13

Nie wiem co zrobiłem źle, jakieś uwagi?

Link do komentarza
Share on other sites

Przede wszystkim to musisz wyzerować zmienną "a":

char a = 0;

Możeszz wyrzucić zmienną "b" i po prostu do wyniku ("c") dodajesz 3 (w sumie to chyba nawet możesz wyrzucić i "c" i napisać a=a+3 i wyświetlać znowu "a").

Dodatkowo nie wiem czy do końca poprawne jest dodawanie inta ("b") do chara ("a").

Nie jestem pewien czy to są wszystkie błędy. Pokaż poprawiony kod i napisz co się pokazuje na porcie szeregowym.

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

Problemem jest to, że metoda Serial.print jest "sprytna" i zachowuje się inaczej kiedy dostaje parametr typu char (wypisuje na serial znak ASCII odpowiadający numerkowi), a inaczej kiedy dostanie parametr typu int (wypisuje numerek sformatowany w systemie dziesiętnym). Kolega najpierw wczytuje znak ASCII "1", czyli liczbę 49, potem dodaje do tego 3 i dostaje 52. Następnie wczytuje znak enter, który ma numerek 13. Wszystko się zgadza.

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.