Bitte ändert euer Passwort!

Im März 2026 wurde das Forum gehackt. Dabei hatten die Angreifer Zugriff auf die Datenbank und somit Zugriff auf eure Passwörter. Auch wenn das Forum kein Passwort im Klartext speichert, können die Angreifer eure Passwörter knacken. Bitte ändert daher dringend euer Passwort für das Forum. Solltet ihr das gleiche Passwort auch an anderer Stelle verwenden, ändert es bitte unbedingt an allen Stellen!

Arduino Library für die Dekodierung von EX-Paketen

  • Eckehard
  • Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 65
  • Thanks: 6

Re: 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
Letzte Änderung: 05 Jan. 2018 20:41 von Eckehard.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Autor
  • Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 307
  • Thanks: 154

Re: 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
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Autor
  • Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 307
  • Thanks: 154

Re: 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.
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Eckehard
  • Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 65
  • Thanks: 6

Re: 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
Letzte Änderung: 06 Jan. 2018 12:12 von Eckehard.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Eckehard
  • Offline
  • Senior Mitglied
  • Senior Mitglied
  • Beiträge: 65
  • Thanks: 6

Re: 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....
...
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.....:
...
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.
...
Da muss ich mir wohl etwas überlegen, wo noch Speicher zu sparen ist.
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
Letzte Änderung: 08 Jan. 2018 21:21 von Eckehard.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Autor
  • Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 307
  • Thanks: 154

Re: 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
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.591 Sekunden
Powered by Kunena Forum