Arduino Library für die Dekodierung von EX-Paketen
- Eckehard
-
- Offline
- Senior Member
-
- Posts: 65
- Thank you received: 6
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
05 Jan 2018 20:38 - 05 Jan 2018 20:41
Hallo,
wie im Video zu sehen stimmen die Anzeigen für Flieskomma Zahlen nicht....
Ok, konkret ....
Empfangen habe ich (vor dem Parsen)
<GPS 3276a409 2 Longitude 11.67543>
Beim Parsen mit :
int n = sscanf(buffer,"<%s %lx %d %s %d>", &sensor, &serial, &id, &label, &value);
wird daraus:
SENSOR=GPS SERIAL=3276A409 ID=2 LABEL=Longitude VALUE=11 sscanf=5
Was "falsch" ist: aus 11.67543 wird 11
Hat jemand eine Idee wie ich den format specifier für sscanf setzen muss damit ich Fliesskommazahlen auch geparst bekomme?
Mein Versuch mit
int n = sscanf(buffer,"<%s %lx %d %s %.2f>", &sensor, &serial, &id, &label, &value);
liefert leider :
SENSOR=GPS SERIAL=3276A409 ID=2 LABEL=Longitude VALUE=0.00 sscanf=4
sscanf=4 bedeutet dass sscanf keine 5 Werte mehr erkannt hat, sondern nur 4
1000 Dank im Vorraus für einen Tipp!
Eckehard
wie im Video zu sehen stimmen die Anzeigen für Flieskomma Zahlen nicht....
Ok, konkret ....
Empfangen habe ich (vor dem Parsen)
<GPS 3276a409 2 Longitude 11.67543>
Beim Parsen mit :
int n = sscanf(buffer,"<%s %lx %d %s %d>", &sensor, &serial, &id, &label, &value);
wird daraus:
SENSOR=GPS SERIAL=3276A409 ID=2 LABEL=Longitude VALUE=11 sscanf=5
Was "falsch" ist: aus 11.67543 wird 11
Hat jemand eine Idee wie ich den format specifier für sscanf setzen muss damit ich Fliesskommazahlen auch geparst bekomme?
Mein Versuch mit
int n = sscanf(buffer,"<%s %lx %d %s %.2f>", &sensor, &serial, &id, &label, &value);
liefert leider :
SENSOR=GPS SERIAL=3276A409 ID=2 LABEL=Longitude VALUE=0.00 sscanf=4
sscanf=4 bedeutet dass sscanf keine 5 Werte mehr erkannt hat, sondern nur 4
1000 Dank im Vorraus für einen Tipp!
Eckehard
Last edit: 05 Jan 2018 20:41 by Eckehard.
Please Log in or Create an account to join the conversation.
- Sepp62
-
Topic Author
- Offline
- Elite Member
-
- Posts: 305
- Thank you received: 154
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
05 Jan 2018 22:16
Hallo Eckehard,
die sscanf-Funktion in Arduino "stdio.h" scheint nicht richtig zu funktionieren. Es gibt dazu einiges an Literatur im Netz.
Als Ersatz kannst Du probieren:
1. Den Float-Wert mit sscanf und %s als String einlesen und dann mit atof( stringWert ) in float konvertieren.
2. Den ganzen String gleich mit strtok() auseinander nehmen und die numerischen Werte mit atoi() und atof() umwandeln.
VG Bernd
die sscanf-Funktion in Arduino "stdio.h" scheint nicht richtig zu funktionieren. Es gibt dazu einiges an Literatur im Netz.
Als Ersatz kannst Du probieren:
1. Den Float-Wert mit sscanf und %s als String einlesen und dann mit atof( stringWert ) in float konvertieren.
2. Den ganzen String gleich mit strtok() auseinander nehmen und die numerischen Werte mit atoi() und atof() umwandeln.
VG Bernd
The following user(s) said Thank You: Eckehard
Please Log in or Create an account to join the conversation.
- Sepp62
-
Topic Author
- Offline
- Elite Member
-
- Posts: 305
- Thank you received: 154
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
06 Jan 2018 08:43
3. Möglichkeit: Den Float-Wert der Koordinaten mit 10 Millionen (1.0e7) multiplizieren, in ein long integer umwandeln (cast), übertragen, als long integer parsen und dann wieder durch 1.0e7 teilen.
The following user(s) said Thank You: Eckehard
Please Log in or Create an account to join the conversation.
- Eckehard
-
- Offline
- Senior Member
-
- Posts: 65
- Thank you received: 6
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
06 Jan 2018 12:12 - 06 Jan 2018 12:12
Hallo Bernd,
ersteinmal vielen Dank für Deine Mühen mir hier zu helfen!
Der erste Tipp war einfach umzusetzen, das Ergebnis lässt sich sehen..:
Jetzt muss ich noch die einfache Koordinaten Umrechnung machen, damit die GPS Koordinaten wie im Jeti Sender angezeigt werden, "Grad" "Minuten" statt "Dezimalgrad"...
Der Micro läuft sogar mit eienr Lipo Zelle, jedoch nicht zuverlässing unter 3,9V... Ich werde also jetzt auf ProMini3,3V umbauen...
Aber vorher gehts raus zum Fliegen, hier ist Bombenwetter....
Grüße und Danke!
Eckehard
ersteinmal vielen Dank für Deine Mühen mir hier zu helfen!
Der erste Tipp war einfach umzusetzen, das Ergebnis lässt sich sehen..:
Attachment Latitude_fp.jpg not found
Attachment Altitude_fp.jpg not found
Jetzt muss ich noch die einfache Koordinaten Umrechnung machen, damit die GPS Koordinaten wie im Jeti Sender angezeigt werden, "Grad" "Minuten" statt "Dezimalgrad"...
Der Micro läuft sogar mit eienr Lipo Zelle, jedoch nicht zuverlässing unter 3,9V... Ich werde also jetzt auf ProMini3,3V umbauen...
Aber vorher gehts raus zum Fliegen, hier ist Bombenwetter....
Grüße und Danke!
Eckehard
Last edit: 06 Jan 2018 12:12 by Eckehard.
Please Log in or Create an account to join the conversation.
- Eckehard
-
- Offline
- Senior Member
-
- Posts: 65
- Thank you received: 6
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
08 Jan 2018 21:01 - 08 Jan 2018 21:21
Hallo,
heute habe ich nur zwei Kleinigkeiten geändert/getestet:
1. Eine kleine Änderung am Dekoder Sketch sendet nun auch die Einheit des Sensors mit
2. Der schon lange noch ausstehende Test mit einem "handelsüblichen" Sensor, der nicht die TelemetryLibrary (JetiExSensor_V1.0.5.zip, Bernd/Sepp62) verwendet konnte ich heute endlich durchführen.
Nun bekomme ich auch den EX Datenstrom eines UNISENS-E (SM-Modellbaui) dekodiert, und letztendlich angezeigt....
Dabei ist folgendes aufgefallen....
Dabei fällt auf, daß die Reihenfolge der SensorPakete/IDs, siehe Spalte "ID=" im obigen Code:
- Lücken enthhalten (können, je nachdem im Sensor aktiviert ist)
- Die Reihenfolge nicht immer aufsteigend / regelmäßig ist
Wo Licht, da auch Schatten.....:
Im Moment reduziere ich erstmal die maximale Anzahl der Sensor Werte auf 20 (Ziel war den maximalen Wert 32 zu verwenden)
Oder ich spendier der DatenBrille auch einen Teensy.....
Aber wenn auch nur kleine Fortschritte... es macht Spaß!
Grüße
Eckehard
heute habe ich nur zwei Kleinigkeiten geändert/getestet:
1. Eine kleine Änderung am Dekoder Sketch sendet nun auch die Einheit des Sensors mit
2. Der schon lange noch ausstehende Test mit einem "handelsüblichen" Sensor, der nicht die TelemetryLibrary (JetiExSensor_V1.0.5.zip, Bernd/Sepp62) verwendet konnte ich heute endlich durchführen.
Nun bekomme ich auch den EX Datenstrom eines UNISENS-E (SM-Modellbaui) dekodiert, und letztendlich angezeigt....
Dabei ist folgendes aufgefallen....
...
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=1 LABEL=Spannung UNIT=V VALUE=11.25 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=2 LABEL=Strom UNIT=A VALUE=-0.22 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=5 LABEL=Hoehe UNIT=m VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=1 LABEL=Spannung UNIT=V VALUE=11.25 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=2 LABEL=Strom UNIT=A VALUE=-0.22 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=3 LABEL=Kapazitaet UNIT=mAh VALUE=-25.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=5 LABEL=Hoehe UNIT=m VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=7 LABEL=Drehzahl UNIT=rpm VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=7 LABEL=Drehzahl UNIT=rpm VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=1 LABEL=Spannung UNIT=V VALUE=11.25 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=2 LABEL=Strom UNIT=A VALUE=-0.22 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=3 LABEL=Kapazitaet UNIT=mAh VALUE=-25.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=7 LABEL=Drehzahl UNIT=rpm VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=1 LABEL=Spannung UNIT=V VALUE=11.25 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=2 LABEL=Strom UNIT=A VALUE=-0.22 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=5 LABEL=Hoehe UNIT=m VALUE=0.00 sscanf=6
PARSING: SENSOR=UniS-E SERIAL=5CC1A302 ID=7 LABEL=Drehzahl UNIT=rpm VALUE=0.00 sscanf=6
...
Dabei fällt auf, daß die Reihenfolge der SensorPakete/IDs, siehe Spalte "ID=" im obigen Code:
- Lücken enthhalten (können, je nachdem im Sensor aktiviert ist)
- Die Reihenfolge nicht immer aufsteigend / regelmäßig ist
Wo Licht, da auch Schatten.....:
Da muss ich mir wohl etwas überlegen, wo noch Speicher zu sparen ist....
Globale Variablen verwenden 2587 Bytes (101%) des dynamischen Speichers, -27 Bytes für lokale Variablen verbleiben. Das Maximum sind 2560 Bytes.
Nicht genug Arbeitsspeicher; unter www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern.
Fehler beim Kompilieren für das Board Arduino/Genuino Micro.
...
Im Moment reduziere ich erstmal die maximale Anzahl der Sensor Werte auf 20 (Ziel war den maximalen Wert 32 zu verwenden)
Oder ich spendier der DatenBrille auch einen Teensy.....
Aber wenn auch nur kleine Fortschritte... es macht Spaß!
Grüße
Eckehard
Last edit: 08 Jan 2018 21:21 by Eckehard.
Please Log in or Create an account to join the conversation.
- Sepp62
-
Topic Author
- Offline
- Elite Member
-
- Posts: 305
- Thank you received: 154
TPL_KUNENA_MESSAGE_REPLIED_NEW Update zur Sender-Decoder-Library
09 Jan 2018 14:21
Hallo Eckehard,
ich möchte nicht schulmeisterlich in Dein Konzept reinreden, daher nur ein paar Hinweise:
- Ich vermute, Du speicherst ein Abbild aller Sensoren in Deinem Empfänger-Arduino. Das kostet natürlich eine Menge Speicher.
- Die Frage ist, ob das sein muss. Du wirst sicher nicht alle Werte zu einer zeit in Deiner Brille anzeigen.
- D.h. Du könntest Dir irgendwo merken, welche Werte Du gerade anzeigen willst (Liste mit serialID/Id). Das werden wohl nicht mehr als 2-5 Werte sein. Du kannst Dir auch den zuletzt gelieferten Wert und die zugehörigen Einheiten in Deiner Liste merken, das kostet nicht viel.
- Meldet die Library einen neuen Wert, den Du anzeigen möchtest, dann schreibst Du den Messwert in Deine Liste und aktualisierst das Display mit allen Werten aus Deiner Liste.
- Wird der Cursor-Knopf gedrückt, baust Du die besagte Liste neu auf.
Alternativ nimmst Du einen Teensy
VG Bernd
ich möchte nicht schulmeisterlich in Dein Konzept reinreden, daher nur ein paar Hinweise:
- Ich vermute, Du speicherst ein Abbild aller Sensoren in Deinem Empfänger-Arduino. Das kostet natürlich eine Menge Speicher.
- Die Frage ist, ob das sein muss. Du wirst sicher nicht alle Werte zu einer zeit in Deiner Brille anzeigen.
- D.h. Du könntest Dir irgendwo merken, welche Werte Du gerade anzeigen willst (Liste mit serialID/Id). Das werden wohl nicht mehr als 2-5 Werte sein. Du kannst Dir auch den zuletzt gelieferten Wert und die zugehörigen Einheiten in Deiner Liste merken, das kostet nicht viel.
- Meldet die Library einen neuen Wert, den Du anzeigen möchtest, dann schreibst Du den Messwert in Deine Liste und aktualisierst das Display mit allen Werten aus Deiner Liste.
- Wird der Cursor-Knopf gedrückt, baust Du die besagte Liste neu auf.
Alternativ nimmst Du einen Teensy
VG Bernd
The following user(s) said Thank You: Eckehard
Please Log in or Create an account to join the conversation.
Time to create page: 0.366 seconds