使用する物:Arduino,PC(ubuntu16)
したいこと:
C言語を使い,Arduinoからシリアル通信で送られてくるバイナリデータをfloatやintとして表示したいです.
現状:
PC側でバイナリデータは読み込めており,ビッグエンディアンとリトルエンディアンの入れ替えもできているのですが,printf関数を使用してfloatやintとして表示することが出来ません.
よろしくお願いいたします.
以下にArduinoとPC(C言語)のソースコードを貼ります.
Arduino(送信側)
1typedef union { 2 int val; 3 byte binary[2]; 4} u; 5 6typedef union { 7 float val; 8 byte binary[4]; 9} uf; 10 11uf v; 12u fg; 13 14void setup() { 15 // put your setup code here, to run once: 16Serial.begin(115200); 17v.val = 3.14159; 18fg.val = 1997; 19} 20 21 22void loop() { 23 // put your main code here, to run repeatedly: 24 Serial.write(0xff); 25 Serial.write(v.binary, 4); //Z 26 Serial.write(fg.binary, 2); //fg 27 delayMicroseconds(1); 28}
typedef union { int val; unsigned char binary[2]; } u; typedef union { float val; unsigned char binary[4]; } uf; /*****************ここからIArduinoの取得***********************************************************/ int main(){ int plen; int pret; int psize; int32_t v1; int16_t v2; uf vp1; u fg; fdp = open("/dev/ttyACM0", O_RDWR); /*ポートは開ける*/ if(fdp < 0){ printf("open error\n"); return -1; } while (1){ plen = read(fdp, prs_buf, P_BUFF_SIZE); if(plen == 7 && prs_buf[0] == 0xFF){/*Arduinoから送られてきたデータが5byteで,かつ1番目が0xFFのとき,データを取得*/ /* v1 |= prs_buf[4]; v1 <<= 8; v1 |= prs_buf[3]; v1 <<= 8; v1 |= prs_buf[2]; v1 <<= 8; v1 |= prs_buf[1]; v2 |= prs_buf[5]; v2 <<= 8; v2 |= prs_buf[6]; vp1 = v1; fg = v2; printf("%f\n",vp1); printf("%d\n",fg); wait(10000); */ vp1.binary[0] = prs_buf[4]; /*各prs_buf[]にバイナリデータが格納されていることも確認済みです*/ vp1.binary[1] = prs_buf[3]; vp1.binary[2] = prs_buf[2]; vp1.binary[3] = prs_buf[1]; fg.binary[0] = prs_buf[5]; fg.binary[1] = prs_buf[6]; printf("%f\n",vp1.val); /*うまく表示できない*/ printf("%d\n",fg.val); /*うまく表示できない*/ wait(100000); } } }
回答2件
あなたの回答
tips
プレビュー