Skocz do zawartości

Problem z monitorem szeregowym.


Pomocna odpowiedź

Napisano

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?

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.

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...