2016-07-05 10 views
0

私はarduino(送信するためにXbeeを使用)から浮動小数点値をJavaアプリケーションで(Xbeeを使用して)送信しています。 問題は、Javaでデータを受け取ったときに、xbeeパケットに格納されていた元のフロート番号に変換できないということです。私がきたものだJavaでArduinoからuint8として送信された浮動小数点数を取得する

アルドゥイーノ:

ここ
uint8_t* data; 
float value = (voltage*100)/5; 
data = (uint8_t*)(&value); 
for(int i = 0; i<sizeof(data); i++) Serial.println(data[i]): 
Serial.println(*((float*)(data))); 

私はfloat型の値を取ると、私はバイトとしてデータ配列に格納します。たとえば、値22.66の場合、最初の印刷で得られる値は0と72です(データサイズはfloat値を格納した後2です)。 2枚目のプリントは22.66となります。だから、値が正しく保存されているようです。

私はのXBeeパケットでJavaにデータを送信し、私はJavaでこのようなデータを取得する。その後:私は位置からJavaで値22.66を取得する方法を知りたい

XBeeResponse response = xbee.getResponse(2000); 
int[] data = response.getProcessedPacketBytes(); 
System.out.println(data[7] + " " + data[8]); //these positions contain the values stored in arduino -> data[7] = 0 and data[8] = 72) 

データ[7]、データ[8]である。 私はのようないくつかのことを試してみた:

int value = (data[7]) | (data[8]<<8); 
float valuef = Float.intBitsToFloat(value); 

しかし、それは動作しませんでした。

誰でもどのように私がそれを行うことができるか考えていますか?

ありがとうございました!あなたはまだIRが必要な場合は https://github.com/andrewrapp/xbee-api https://github.com/andrewrapp/xbee-arduino

+0

あなたは4バイトになる 'sizeof(value)'を使うべきです。 – tomlogic

答えて

0

:アルドゥイーノで

#include "XBee.h" 

    #define SensorAPin (2) 
    #define SensorBPin (3) 

    float fSensorA ; 
    float fSensorB ; 
    XBee xbee = XBee(); 

    uint8_t payload[8] = { 0, 0, 0, 0, 0, 0, 0, 0}; 

    union u_tag { 
     uint8_t b[4]; 
     float fval; 
    } u; 


    // SH + SL Address of receiving XBee 
    XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x40a300ee); 
    ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload)); 
    ZBTxStatusResponse txStatus = ZBTxStatusResponse(); 

    void setup() { 

    Serial.begin(9600); 
    xbee.setSerial(Serial); 

    } 

    void loop() { 
    if (!isnan(fSensorA) && !isnan(fSensorB)) { 

     u.fval = fSensorA; 
     for (int i=0;i<4;i++){ 
      payload[i]=u.b[i]; 
     } 
     u.fval = fSensorB; 
     for (int i=0;i<4;i++){ 
      payload[i+4]=u.b[i]; 
     } 

     xbee.send(zbTx); 
     } 
    } 

PS:それは場合に役立ちます、私は、Javaとarduinoの中で次のXBeeライブラリを使用しています

Java:

+0

arduinoではuint_8バイト[]配列を送ります。したがって、Javaではバイト配列を読み込み、IBMの浮動小数点形式にデコードしなければなりません。arduinoから送られた各浮動小数点を表すバイトを分離するために、配列を使用できます。 copyOfRange()を使用して、各floatのサブバイト配列を作成すると、bytebuffer関数を使用して各1つのサブバイト配列のfloatを取得できます。 (); – Oriana

関連する問題