Pages: [1]   Go Down
Author Topic: Envoyer un float sur l'UART et le décoder sur PC  (Read 446 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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) >> smiley-cool;
  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) >> smiley-cool;
  buf[1] = (unsigned char)((*memoryPtr) & 0x000000FF);
  Serial.write(buf,sizeof(int));

Quelqu'un a une idée???

Merci!
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3031
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
unsigned int* memoryPtr = (unsigned int*)&x;
moi j'aurais plutôt mis
Code:
unsigned long* memoryPtr = (unsigned long*)&x;
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci! smiley

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

Pages: [1]   Go Up
Jump to: