Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA:

Neuer Link auf Github 04 Dez 2017 20:47 #37

  • Eckehard
  • Eckehards Avatar
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 54
  • Dank erhalten: 6
Hallo Bernd,

ich möchte gerne auch die Seriennummer des Sensors über die Serielle Verbindung übertragen und auf der empfangenden Seite mit sscanf parsen....

Die Nachrichten die geparst werden sollen sehen z.B folgendermaßen aus:

<GPS 0x3276a409 8 Satellites 0.00>


Hier der relevante Teil des Codes:

...

int n = sscanf(buffer,"<%s %i %d %s %d>", &sensor, &serial,&id, &label, &value);

Serial.print("SENSOR=");
Serial.print(sensor);
Serial.print(" SERIAL=");
Serial.print(int(serial));
Serial.print(" ID=");
Serial.print(id);
Serial.print(" LABEL=");
Serial.print(label);
Serial.print(" VALUE=");
Serial.print(value);
Serial.print(" sscanf=");
Serial.println(n);
...


Der obige Code macht daraus z.B.:
...
<GPS 0x3276a409 8 Satellites 0.00>
SENSOR= SERIAL=-23543 ID=8 LABEL=Satellites VALUE=0 sscanf=5
...

Frage:
In der Referenz habe ich folgendes gefunden:

%i : Scan an integer as a signed number. Similar to %d, but interprets the number as hexadecimal when preceded by 0x and octal when preceded by 0.


Der Prefix von 0x hängt ja drann, ok....

Wie muss ich den format specifier von sscanf setzen, damit ich bei der Ausgabe statt -23543 den eigentlichen Wert 3276a409 ausgegeben bekomme....?
Oder ist das eher ein Problem der Ausgabe?


Danke und Grüße
Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Letzte Änderung: von Eckehard. Grund: typo

Neuer Link auf Github 04 Dez 2017 23:22 #38

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Hallo Eckehard,

ich habe mal mit der heissen Nadel ein neues Sample gestrickt, das zeigt, wie man die Daten über JSON enkodiert/dekodiert. Du findest es hier:

github.com/Sepp62/TxJetiEx/tree/master/E...s/TxJetiExTeensyJson

Damit bekommst Du die Daten komplett so wie Du sie losgeschickt hast. Der Einfachheit halber läuft alles auf dem Teensy, der schickt die Daten auf Serial3 raus und empfängt sie dort auch wieder (Brücke zwischen Pin 7 und 8 stecken).

Natürlich musst Du dann (wenn alles so weit geht) das Beispiel aufdröseln. Der Empfänger läuft dann auf Deinem Empfänger-Arduino. Wichtig ist, dass Du die JSON-Library installierst. Sie läuft auch auf den kleinen Arduinos, aber zugegebenermaßen geht dort der Speicher schnell aus.

Ich hoffe, das hilft Dir. sscanf() geht prinzipiell auch, aber man macht da leicht Fehler und dann kackt das ganze Programm ab.

VG Bernd

PS: Es gibt übrigens noch einen "Bug" im Dekoder. Länge/Breite und Datum/Zeit werden nicht gekennzeichnet. Man muss anhand der Einheit rauskriegen, welcher Wert es ist. Das muss ich bei Gelegenheit ergänzen.
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Neuer Link auf Github 04 Dez 2017 23:24 #39

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Noch zu Deinem sscanf-Thema:

Probier' mal "%lx" für die SerialId.

forum.arduino.cc/index.php?topic=107262.0

VG Bernd
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Neuer Link auf Github 05 Dez 2017 09:42 #40

  • Eckehard
  • Eckehards Avatar
  • Offline
  • Senior Boarder
  • Senior Boarder
  • Beiträge: 54
  • Dank erhalten: 6
Hallo Zusamen,

ahh, danke für den Hinweis mit %lx.... Das werde ich mal probieren.

Hätte ich auch selber drauf kommen können, Du hast es ja im TxJetiEx.ino quasi vorgemacht:

void PrintValue( TxJetiExPacketValue * pValue )
{
char buf[50];
float fValue;
uint8_t day; uint8_t month; uint16_t year;
uint8_t hour; uint8_t minute; uint8_t second;

sprintf(buf, "Value from %s, Serial: %08lx/Id: %d", pValue->GetName(), pValue->GetSerialId(), pValue->GetId() ); Serial.println( buf );
sprintf(buf, "Val - %s: ", pValue->GetLabel() ); Serial.print( buf );


Und der Hinweis auf Json ist auch cool! Das muss ich dann bei Gelegenheit auch mal umstellen, dann lernt man ja wieder was Neues....

DANKE!

Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Neues Beispiel für "Adafruit BLE UART friend" 05 Dez 2017 21:14 #41

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Ich habe nun mal mein "Adafruit BLE UART Friend" -Modul an den Teensy angeschlossen und ein Sample dafür gemacht (github.com/Sepp62/TxJetiEx/tree/master/E...iExTeensyBluefruitLE).

Bei diesem Modul kann man die Sendeleistung sehr stark reduzieren (-40dbm). Damit ist die Sendereichweite ebenfalls ziemlich reduziert (ca. 2 m).

Die Ansteuerung des Moduls ist sehr unkompliziert (wenn man es denn mal richtig verkabelt hat) und Connect/Reconnect arbeiten recht stabil. Das Ganze ging jetzt wirklich fix und die Adafruit-Leute liefern hier (so weit ich das Teil eben nutze) wirklich gute Arbeit ab.

Ich glaube, ich würde mich trauen das Modul in meinen Sender einzubauen.

VG Bernd
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Neues Beispiel für "Adafruit BLE UART friend" 05 Dez 2017 21:52 #42

  • Sepp62
  • Sepp62s Avatar Autor
  • Offline
  • Gold Boarder
  • Gold Boarder
  • Beiträge: 289
  • Dank erhalten: 134
Damit hier nicht immer nur Text entsteht, mal ein Bild von meinem Testaufbau.

Links der ESP32 und rechts der Teensy mit dem Bluefruit-Modul. Das in der Mitte gehört nicht dazu. Das Schöne an diesen Wireless-Experimenten ist, dass man kaum löten muss :-)
Anhänge:
Folgende Benutzer bedankten sich: Eckehard

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 0.265 Sekunden
Powered by Kunena Forum