Go Down

Topic: Envoyer un float sur l'UART et le décoder sur PC (Read 541 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