Forum: Mikrocontroller und Digitale Elektronik Bluetooth-Module Datenübertragung


von gertrud h. (Firma: HTL) (falron94)


Lesenswert?

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

von Marc (gierig) Benutzerseite


Lesenswert?

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.

von Mirco C. (Firma: s@Td) (mcontroller)


Lesenswert?

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.

von gertrud h. (Firma: HTL) (falron94)


Lesenswert?

ok danke für die antworten

aber wie kann ich die bytes einzeln verschicken?

von Avr A. (colombo010)


Lesenswert?

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

von gertrud h. (Firma: HTL) (falron94)


Lesenswert?

ok danke

und der empfangsbuffer ist ein array in welche man die werte des 
sendebuffer speicher?

von Avr A. (colombo010)


Lesenswert?

Ja richtig und den buffer sendet man dann so;
char index=0;

while (index<sizeif(float))
{
  uart_putchar(sendebuffer[index]);
  index++;
}

: Bearbeitet durch User
von gertrud h. (Firma: HTL) (falron94)


Lesenswert?

ok danke

aber wieso machst du immer sizeof(float)? stimmt das oder muss man 
sizeof(zahl)?

von Avr A. (colombo010)


Lesenswert?

Das ist völlig egal sizeof(float) ist gleich sizeof(Zahl). Dahinter 
steckt jeweils die Zahl 4.

von gertrud h. (Firma: HTL) (falron94)


Lesenswert?

ah ok :D

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
Noch kein Account? Hier anmelden.