String seriell einlesen und Teile davon auf Anzeige ausgeben

Hallo zusammen,

ich habe mir zur Aufgabe gestellt: die seriell ausgegebenen Daten einer Päzisions-Waage auf eine 7-Segment-LED-Anzeige zu übertragen.
Grund hierfür ist, dass diese (sehr teure) Waage nur über eine sehr schlecht abzulesende LCD-Anzeige verfügt.

Ich habe, mit miene Anfägerkentnissen, schon so manschen Sketsh ans laufen gebracht, aber hier fehlt mir schon im Ansatz die Idee.
DAU braucht Hilfe!

Die Waage hat einen RS232C Port, über den Drucker direkt angeschlossen werden können. Über diesen Port wird ein ASCII-String aus gegeben, mit folgendem Foramt:

8-bit ASCII Code
1 Startbit, 8 Datenbits, 1 Stopbits, kein Paritätsbit
Baudrate wählbar auf 2400, 4800, 9600 Baud (Werkseinstellung) und 19200 Baud.

Byte-Nr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
B* B B B B B B B B 0 . 0 B g B B CR LF

B*: = Blank oder bei % Autotara an im Nullbereich.
B, 0, ., g: = Blank oder Wägewert mit Einheit, je nach Belastung der Waage.
CR: = Carriage Return
LF: = Line Feed

also 16 Zeichen + 'CR' und 'LF'.
Byte 1-4 sowie 13-16 sind für mich uninteressant.

Byte 5: Wägewert-Vorzeichen ('-') und Byte: 6-12 Wägewert mit Dezimalpunkt sind die 8 Zeichen, die nachher auf der LED-Anzeige erscheinen sollen.

Die Waage gibt die Daten, je nach Konfiguration, entweder kontinuierlich, oder, einen einzelnen String, auf Komando aus.
Empfängt die Waage ein 'w' - gibt sie einen Wägewert, auch instabli, sofort aus.
's' - gibt den nächsten stabilen Wert aus.
Oder kontinuierliche Datenausgabe ca. alle 300-600ms. (alle Werte, auch instabile)

Mir steht ein ARDUINO-Nano (328) zur Verfügung. Die 7-Segment-Anzeige muss noch besorgt werden.

Über einen hifreichen Denkanstoss wäre ich sehr erfreut!

Um einen String einzulesen:

In deinem Fall das #define USE_SERIAL1 auskommentieren, oder das Makro kann entfernen und fest Serial verwenden.

Und den Puffer auf mindestens 17 Zeichen vergrößern.

Zur Auswertung kann man dann zu Zeiger-Arithemtik greifen. z.B. kann man mit "Serial.println(readline + 5)" die Ausgabe erst beim 5. Zeichen anfangen. Und man kann vorher mit "*(readline + 13) = 0" oder "readline[13] = 0" alles nach dem 13. Zeichen abschneiden.

Wobei du da sowieso noch etwas Logik brauchst um dass von einem ASCII String auf deine 7-Segment Anzeige umzusetzen.

Hallo Serenifly,

das war ja mal ne prompte Antwort! Und vor allen Dingen eine nützliche und funktionierende!

Vielen, vielen Dank!

Kurz nach dem Osteressen mal eben den code reingehackt, ein wenig nach Deinen Angaben verändert, und schon hatte ich meine 16 Zeichen im INO, so wie ich das wollte!
Jetzt kümmere ich mich noch um die Zeiger, davon ausgehend, dass dieser Part Deiner Anleitung auch funzt und der Rest dann später.................

LG und frohe Ostern
eckyM

Hallo Serenifly,

nur kurz, es klappt alles prima!

Nur bei "Serial.println(readline + 5)" werden die ersten 5 zeichen abgeschnitten und die Ausgabe beginnt erst beim 6. Byte .

Vielen dank nochmals!

LG eckyM

Mhh, ja, da man bei mit dem Zählen bei 0 anfangen sollte :slight_smile: