2016-11-21 140 views
0

我使用Pro Mini作为I2C从机,它计算双精度。 ESP8266 WiFi模块要求这两个字节,它通过字节逐字节发送。通过I2C从Arduino Pro Mini发送双向ESP8266

现在我试图在另一端重新组装双层,但它不工作。 上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的临迷你发现了一个double为4个字节,但是,ESP8266 8个字节。我可以转换吗?

+2

我的猜测是,你可以在两边都使用'float',因为你的Arduino显然不提供双精度。 – user3528438

+0

是的,但我使用几乎每种方法都返回'双打'的库。但是在Arduino中看起来'double'和'float'是一样的,我可以将'union'改成'float'成员吗?我会试试看!谢谢:) –

+3

我建议你除了将'union'改为'float'之外,还将它明确地转换为'float',以便在'double'的定义发生变化时代码将来不会中断。 – user3528438

回答

0

ESP8266是32位处理器,所以sizeof(int)是4和sizeof(double)是8.在ATmega328 sizeof(int)是2和sizeof(double)是4。然而,在这两种处理器sizeof(float)是4,这就是为什么你可以使用你的评论提到的解决方法。

因为你面对的整数会更好只使用intuint32_t代替double在ESP8266的代码,这样的长度是一样的Arduino的double。这样你就可以避免使用浮点数来产生不必要的相当多的代码字节。