Forum: Mikrocontroller und Digitale Elektronik 2 stellige Zahl Seriell übertragen


von Christoph Fuggersberger (Gast)


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

von Max H. (hartl192)


Lesenswert?

Zeig uns mal deinen Code.

von Donni D. (Gast)


Lesenswert?

Inch nehme an du benutzt Serial.print oder Serial.println.
Benutz mal Serial.write, damit schreibst du Bytes

von Max H. (hartl192)


Lesenswert?

Wenn du die Zahl als ASCII überträgst, kannst du nur eine einstellige 
Zahl übertragen. Du könntest sie aber binar (0 bis 255) oder im BCD 
Format (0 bis 99) übertragen.

von Christoph Fuggersberger (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Programmcode.

von Christoph Fuggersberger (Gast)


Lesenswert?

Wie könnte ich die Zahl als BCD übertragen?

von Max H. (hartl192)


Lesenswert?

Christoph Fuggersberger schrieb:
> LED_Matrix_Fehler.ino
Womit öffnet man so eine *.ino Datei?

von Christoph Fuggersberger (Gast)


Lesenswert?

Mit der Arduino IDE -->
http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.zip
Ginge aber zur Not auch mit Editor etc. ;)

von Max H. (hartl192)


Lesenswert?

Serial.print(12);

Du könntest es z.B. so versuchen Dann musst du ein Treminal von ASCII 
auf Dezimal umstellen.

von Christoph Fuggersberger (Gast)


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.

von Donni D. (Gast)


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

von Philip P. (nosuchnick)


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

: Bearbeitet durch User
von Christoph Fuggersberger (Gast)


Lesenswert?

Ich habe gerade HTerm ausprobiert, und es liegt wirklich am Serial 
Monitor.
Funktioniert super, DANKE!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.