Go Down

Topic: Envoyer un float sur l'UART et le décoder sur PC (Read 580 times) previous topic - next topic

Guillaume Helle

Bonjour,

mon board est relié à un PC via une UART.
Je lui envois des float avec le code suivant :

 unsigned int* memoryPtr = (unsigned int*)&x;
 buf[0] = (unsigned char)(((*memoryPtr)& 0xFF000000) >> 24);
 buf[1] = (unsigned char)(((*memoryPtr)& 0x00FF0000) >> 16);
 buf[2] = (unsigned char)(((*memoryPtr)& 0x0000FF00) >> 8);
 buf[3] = (unsigned char)((*memoryPtr) & 0x000000FF);
Serial.write(buf,sizeof(float));

Côté PC je lis des float (en Java) mais ils ne correspondent pas à ce que j'envois...

Pourtant ça marche très bien avec des int (lecture de short en Java) :

 unsigned int* memoryPtr = (unsigned int*)&x;
 buf[0] = (unsigned char)((*memoryPtr) >> 8);
 buf[1] = (unsigned char)((*memoryPtr) & 0x000000FF);
 Serial.write(buf,sizeof(int));

Quelqu'un a une idée???

Merci!

fdufnews

Quote
unsigned int* memoryPtr = (unsigned int*)&x;

moi j'aurais plutôt mis
Code: [Select]
unsigned long* memoryPtr = (unsigned long*)&x;

Guillaume Helle

Merci! :)

Ca explique pourquoi ça marchait pour les int (2 bytes) et pas pour les float (4 bytes)!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy