2 stellige Zahl Seriell übertragen

Gast #3493665
Lesenswert?

Hallo,

ich bin gerade auf das Problem gestoßen, dass ich bei meinem Arduino nur 
eine 1 Stellige Zahl übertragen kann.
Da ich aber die Werte von 1-64 Übertragen möchte, muss ich auch 2 
Stellige Zahlen übertragen.
Wenn ich die Serielle Eingabe im "Serial Monitor " ausgeben lasse, wird 
12 zb. nicht als 12 sondern als 1 und 2 , also als 2 einzelne Zahlen 
eingelesen.
Wie kann ich also eine 2 Stellige Zahl einlesen, und auch als solche 
abspeichern?

Mfg. Christoph
Gast #3493705
Lesenswert?

Ja das wäre eine Lösung für die Ausgabe, aber es geht mir eigentlich nur 
um die Eingabe.
Die Ausgabe habe ich nur in den Code geschrieben um zu kontrollieren ob 
die Eingabe richtig eingelesen wird.
Gast #3493967
Lesenswert?

Dann musst du ein anderes Terminalprogramm verwenden. Der Serial-Monitor 
von der Arduino IDE sendet glaube ich nur Zeichen. Lad dir HTerm runter, 
stell unten die Ausgabe von ASC auf DEC und dann kannste deine Zaheln 
schicken
#3494053
Lesenswert?

Kurze Zusammenfassung, um sicher zu gehen, dass Ich deine Problem 
richtig verstanden habe:

1. Du gibst am PC im Arduino Terminal die Zahl 12 ein.
2. Der Arduino empfängt eine 1
3. Der Arduino empfängt eine 2
4. Du willst jetzt in der Variable 'in' wieder eine 12 abgespeichert 
haben.

Soweit richtig?


Ein möglicher Lösungsanasatz:
Was du als erstes brauchst ist eine Möglichkeit verschiedene Zahlen zu 
unterscheiden. Wenn du 12,12,12 sendest, woher weiß der Arduino, dass du 
12,12,12 meinst und nicht 121212 oder 121,212?

Sinnvollerweise würde ich hierfür das Absatzzeichen "\n" nehmen. Wenn 
ein Absatz kommt, ist die Zahl zu ende und eine neue Zahl fängt an.

Um die Zahl selbst einzulesen, erst ein kurzer Rückblick auf das 
Dezimalsystem. Die Zahl 123 ist effektiv eine kurze Schreibweise für
1 * 100
+ 2 * 10
+ 3 * 1

bzw.

1 * 10^2
+ 2 * 10^1
+ 3 * 10^0

Wenn du jetzt deine Zahl einliesst, kannst du nach folgenden Muster 
vorgehen:
1
1 : tempZahl = 0;
2
2 : ergebnis = 0;
3
3 : 
4
4 : loop:
5
5 :   aktuellesZeichen = leseZeichenVonSerial();
6
6 :   wenn aktuellesZeichen == '\n':
7
7 :     ergebnis = tempZahl;
8
8 :     tempZahl = 0;
9
9 :   sonst:
10
10:     tempZahl = tempZahl * 10;
11
11:     tempZahl = tempZahl + wandeleZuZahl(aktuellesZeichen);


Spiel dieses Beispiel mal mit ein paar verschiedenen Eingaben durch, und 
implementier das dann in richtigem C++.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren