如何通过I2C从Arduino Mega到我的Raspberry获得双倍?

时间:2017-06-11 22:21:59

标签: arduino raspberry-pi arduino-uno

我想从我的Arduino Mega向我的Raspberry发送一个双。是否可以通过I2C执行此操作?这是我的代码:

#include <Wire.h>

#define SLAVE_ADDRESS 0x04
int dataReceived = 0;

void setup() {
    Serial.begin(9600);
    Wire.begin(SLAVE_ADDRESS);
    Wire.onReceive(receiveData);
    Wire.onRequest(sendData);

}

void loop() {
    delay(100);
}

void receiveData(int byteCount){
    while(Wire.available()) {
        dataReceived = Wire.read();
        Serial.print("Donnee recue : ");
        Serial.println(dataReceived);
    }
}

void sendData(){
    int answer = dataReceived + 100;
    Wire.write(answer);

}

我的代码中的问题是我无法编写浮动答案而不是int答案。 有什么建议吗?

非常感谢!

编辑:

这是Python中的代码,用于获取double的值:

import smbus import time  
bus = smbus.SMBus(0) 
address = 0x04  
print "double" 
bus.write_byte(address, 6)

time.sleep(1) 
answer = bus.read_byte(address) 
print answer

2 个答案:

答案 0 :(得分:0)

这是因为您的dataReceivedanswer被声明为int。如果您的意思是即使使用float / double也无法让它工作,您可以试试这个,它应该有用:

double sending_data = 123.456;
uint8_t Write_Buffer[sizeof(sending_data)];

memcpy(&Write_Buffer[0], &sending_data, sizeof(sending_data));

Wire.write(&Wbuffer[0], sizeof(sending_data));

我认为此处的双倍和浮点数与Arduino Mega(4字节)相同:https://www.arduino.cc/en/Reference/Double

答案 1 :(得分:0)

除了串口问题,因为低端的Arduinos(328s)缺乏对浮点的内置硬件支持,浮点是用软件完成的。内置的Arduino库(实际上也适用于GCC)将EXTRA_OEMAKE_append = " 'LDFLAGS=${LDFLAGS}'" single视为同一个,即double。如果您需要更多可能第三方库是答案:BigNumber