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
Inch nehme an du benutzt Serial.print oder Serial.println. Benutz mal Serial.write, damit schreibst du Bytes
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.
Mit der Arduino IDE --> http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.zip Ginge aber zur Not auch mit Editor etc. ;)
Serial.print(12); Du könntest es z.B. so versuchen Dann musst du ein Treminal von ASCII auf Dezimal umstellen.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.