Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA:

Update zur Sender-Decoder-Library 05 Jan 2018 21:38 #55

  • Eckehard
  • Eckehards Avatar
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 54
  • Dank erhalten: 6
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Eckehard.

Update zur Sender-Decoder-Library 05 Jan 2018 23:16 #56

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
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.

Update zur Sender-Decoder-Library 06 Jan 2018 09:43 #57

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
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.

Update zur Sender-Decoder-Library 06 Jan 2018 13:12 #58

  • Eckehard
  • Eckehards Avatar
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 54
  • Dank erhalten: 6
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
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Eckehard.

Update zur Sender-Decoder-Library 08 Jan 2018 22:01 #59

  • Eckehard
  • Eckehards Avatar
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 54
  • Dank erhalten: 6
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

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Eckehard.

Update zur Sender-Decoder-Library 09 Jan 2018 15:21 #60

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
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.296 Sekunden
Powered by Kunena Forum