PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : werte von 2 Ultraschallsensoren mit xbee übertragen



Darkon
25.05.2015, 18:39
Hallo leute, ich hab da mal'ne frage:

und zwar folgendes, ich möchte von 2 ultraschallsensoren (einer für hinten und einer für vorne), die mit einem arduino (an dem noch ein xbee-modul hängt) verbunden sind, die werte erfassen, im serialmonitor wieder geben und zum anderen arduinio (der ebenfalls ein xbee-modul besitzt) senden. mein Problem ist nun, dass ich werte von 2 sensoren habe, die sich ähneln oder auch identisch sind, mit welchem kleinen trick könnte ich die werte so kennzeichnen, dass sie selbst beim auslesen am Empfänger individuell zu ihren sensoren sind oder müsste ich eine art libary oder so erstellen, in der hervorgeht, dass z.b. vom hinteren ultraschallsensor der wert (nennen wir ihn hier mal: 122) mit einem h (für hinten ergänzt wird). also für hinten: 122 --> 122h und für vorne: 122--> 122v.
wüsstet ihr eine lösung?

HeXPloreR
25.05.2015, 19:20
Hallo Darkon,

ich habe ein ähnliches Problem so gelöst: Vor dem betreffenden Wert kommt das "h". Code vergleicht ob 'h' eingegangen ist, dann werden der Char-Werte mitgelesen und in ein Array verpackt und umgewandelt. Mein Array ist nur maximal 4 Zeichen groß, weil keine Zahlen über 1000 empfangen werden. Also nur 3 Stellen. Das letzte Array-Feld (4.) benutze ich um den vorhergehenden Wert als komplett anzunehmen in dem ich ein 'H' sende und prüfe ob das im letzten Array-Feld vorhanden ist. Das Ganze dann ohne das 'H' einer Variablen übergeben.

Bei dem anderen Wert würde sich 'v' und 'V' eignen.

Viele Grüße
Jörg

Klebwax
25.05.2015, 20:41
Bei einer seriellen Übertragung arbeitet man gerne zeilenweise. Also, eine Zeile Text abgeschlossen mit CR oder LF oder auch beidem. Und auf die Zeile schreibt man hin, was man sagen will. Als Beispiel: "vorn=17, hinten=28". Dann kann man immer auf einem Terminal mitlesen und weiß, was gemeint ist. Das läßt sich auch leicht parsen, ein Komma trennt die Records, ein Gleichheitszeichen Parameter von Wert. Das kann bei weiteren Parametern leicht verlängert werden. In diesem einfachen Fall reicht es, den ersten Buchstaben des Parameters auszuwerten, wenn es mal mehr werden, muß man den ganzen Namen vergleichen. Auch die umgekehrte Richtung läßt sich da leicht unterbringen: "hinten=?" fragt den Wert für hinten ab.

Wenn da mal etwas verloren geht, kann man sich leicht wieder synchronisieren. Auf ein Linefeed oder auf ein Komma warten und loslegen. Der Name des Parameters ist ja eindeutig. Der Sender könnte auch einen Parameter mal auslassen. Dazu könnte man verabreden, daß dann der letzte Wert immer noch gilt.

Die libc hilft einem beim Parsen von Strings, von den einfachen Sachen wie strcmp() bis zu strtok() (http://www.c-howto.de/tutorial-strings-zeichenketten-stringfunktionen-zerteilen-strtok.html).

MfG Klebwax

Darkon
25.05.2015, 20:56
hallo klebwax, erstmal danke für deine antwort, nur leider kann ich mir das gerade schlecht vorstellen, wie du das meinst, könntest du ein kleines Beispiel aufführen?

shedepe
25.05.2015, 21:16
Das geht doch recht einfach: Du schickst irgendetwas mit das den Sensor indentifiziert. Z.B. eine 1. Und als Ende eines Datensatz machst du ein Leerzeichen. Da du weist wie viele bytes Daten du bekommst und wie viele Bytes Identifikation, kannst du das auseinander halten und die gewünschte Information extrahieren.