Hi, ich versuche zurzeit Daten (brauche nur float) zwischen zwei Arduinos hin und her zu schicken. Das ganze soll mit Hilfe von 2 Bluetooth-Modulen (https://www.sparkfun.com/products/10393) realisiert werden. Die beiden Module verbinden sich bei anlegen einer Spannung bereits automatisch und es können auch Daten verschickt werden. Das Problem ist, dass nur Werte zwischen 0-255 (1 Byte) gesendet werden und höherwertige einfach auf diesen Bereich zugeschnitten werden. Bei Senden eines Strings wird jeder Buchstabe einzeln verschickt. Kann mir jemand bitte einen Tipp geben, wie ich float-Werte von 0.-1024.0 verschicken kann und das richtige Ergebnis am Empfänger-Modul ankommt? Freundliche Grüße Gertrud
gertrud hiller schrieb: > Das Problem ist, dass nur Werte zwischen 0-255 (1 Byte) gesendet werden > und höherwertige einfach auf diesen Bereich zugeschnitten werden. > Bei Senden eines Strings wird jeder Buchstabe einzeln verschickt. Das ist kein Problem sondern Absicht. Serielle Kommunikation (auch wenn du da nen BT Modul zwischen hast) ist nun nun mal Zeichen Basiert. Deinen Float must zu zerlegen als String senden und wieder zusammenbauen. Schau die die "dtostre" und "dtostrf" Funktion an.
Dein float besteht auch aus Bytes. Übertrage die einzeln und setzte sie beim Empfänger wieder zusammen. Kann natürlich sein, dass es eine fertige tualles-zeignichts Funktion dafür gibt.
ok danke für die antworten aber wie kann ich die bytes einzeln verschicken?
Hallo, das geht ganz einfach, in dem man einen Pointer auf den anfang der Adresse der Floatzahl zeigen lässt. diese ist ja 4 Byte lang. Das geht folgender Maßen: float Zahl=32.5; char *zahlPointer= (char*)&Zahl; char floatgroese= sizeof(float); for(i=0; i < sizeof(float); i++) { sendepuffer[i]=*zahlPointer; zahlPointer++; } So schreibt man die 4 Bytes in einen Buffer Um die 4 Bytes wieder auf der Empfangsseite zusammenzusetzen geht man ähnlich vor float empfangsZahl; char *zahlPointerempfangsZahl= (char*)&empfangsZahl; for(i=0; i<sizeof(float);i++) { *zahlPointerempfangsZahl=empfangspuffer[i]; zahlPointerempfangsZahl++; } so werden die 4 Bytes in die Variable empfangsZahl geschoben
ok danke und der empfangsbuffer ist ein array in welche man die werte des sendebuffer speicher?
Ja richtig und den buffer sendet man dann so; char index=0; while (index<sizeif(float)) { uart_putchar(sendebuffer[index]); index++; }
:
Bearbeitet durch User
ok danke aber wieso machst du immer sizeof(float)? stimmt das oder muss man sizeof(zahl)?
Das ist völlig egal sizeof(float) ist gleich sizeof(Zahl). Dahinter steckt jeweils die Zahl 4.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.