0

Pro Mini を double を計算する I2C スレーブとして使用しています。この double は ESP8266 WiFi モジュールによって要求され、I2C 経由でバイトごとに送信されます。

今、もう一方の端でダブルを再構築しようとしていますが、機能していません。ESP8266 で実行されている現在のコード:

// ABOVE SETUP
union {
  byte bytes[4];
  double value;
} bytedouble;

// IN LOOP
while(Wire.available()){
  byte read = Wire.read();
  bytedouble.bytes[num] = read;
  num++;
}
Serial.println(bytedouble.value); // Returns ovf/overflow

Arduino Pro Mini のadoubleは 4 バイトですが、ESP8266 では 8 バイトであることがわかりました。これを変換できますか?

4

1 に答える 1

0

ESP8266 は 32 ビット プロセッサなのでsizeof(int)4 でsizeof(double)8です。ATmega328sizeof(int)では 2 でsizeof(double)4 です。ただし、両方のプロセッサsizeof(float)で 4 であるため、コメントで言及した回避策を使用できます。

整数を扱っているので、ESP8266 のコードの代わりにintorを使用したほうがよいので、長さは Arduino の と同じになります。そうすれば、不要なコードのかなりのバイト数を生成するフロートの使用を避けることができます。uint32_tdoubledouble

于 2016-12-07T06:50:16.420 に答える