Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 通过BLE发送浮点值的最佳方法_Arduino_Bluetooth Lowenergy - Fatal编程技术网

Arduino 通过BLE发送浮点值的最佳方法

Arduino 通过BLE发送浮点值的最佳方法,arduino,bluetooth-lowenergy,Arduino,Bluetooth Lowenergy,我试图在一个蓝牙特性中通过BLE向客户端发送四元数(4个浮点值)。我关心的是找到传递数据的最快、计算要求最低的方法 到目前为止,我一直在使用sprintf()连接浮点值并将它们推送到setValue()但是我无法在客户端解码输出字节。我想把这些值作为int发送,然后在客户端将它们解析回float。你认为什么是最好的解决方案 服务器端的代码: if (deviceConnected) { readQuatData(BNO055_quatCount); BNO055_q

我试图在一个蓝牙特性中通过BLE向客户端发送四元数(4个浮点值)。我关心的是找到传递数据的最快、计算要求最低的方法

到目前为止,我一直在使用
sprintf()
连接浮点值并将它们推送到
setValue()
但是我无法在客户端解码输出字节。我想把这些值作为int发送,然后在客户端将它们解析回float。你认为什么是最好的解决方案

服务器端的代码:

 if (deviceConnected) {

    readQuatData(BNO055_quatCount);

        BNO055_quat[0] = (float)(BNO055_quatCount[0]) / 16384.;
        BNO055_quat[1] = (float)(BNO055_quatCount[1]) / 16384.;
        BNO055_quat[2] = (float)(BNO055_quatCount[2]) / 16384.;
        BNO055_quat[3] = (float)(BNO055_quatCount[3]) / 16384.;

sprintf(myConcatenation, "%3.2f %3.2f %3.2f %3.2f", BNO055_quat[0] , BNO055_quat[1], BNO055_quat[2], BNO055_quat[3]);

pCharacteristic->setValue(myConcatenation);

      pCharacteristic->notify(); // Send the value to the app!
}
以下是
SetValue()
函数的可能输入:

void BLECharacteristic::setValue(std::string value) {
        setValue((uint8_t*)(value.data()), value.length());
} // setValue

void BLECharacteristic::setValue(uint16_t& data16) {
    uint8_t temp[2];
    temp[0] = data16;
    temp[1] = data16 >> 8;
    setValue(temp, 2);
} // setValue

void BLECharacteristic::setValue(uint32_t& data32) {
    uint8_t temp[4];
    temp[0] = data32;
    temp[1] = data32 >> 8;
    temp[2] = data32 >> 16;
    temp[3] = data32 >> 24;
    setValue(temp, 4);
} // setValue

void BLECharacteristic::setValue(int& data32) {
    uint8_t temp[4];
    temp[0] = data32;
    temp[1] = data32 >> 8;
    temp[2] = data32 >> 16;
    temp[3] = data32 >> 24;
    setValue(temp, 4);
} // setValue

 void BLECharacteristic::setValue(float& data32) {
    uint8_t temp[4];
    *((float*)temp) = data32;
    setValue(temp, 4);
} // setValue

void BLECharacteristic::setValue(double& data64) {
    uint8_t temp[8];
    *((double*)temp) = data64;
    setValue(temp, 8);
} // setValue

缺少您正在使用的唯一setValue重载<代码>设置值(常量字符*)。但就你的要求而言,这不是最好的办法。显然还有一个
setValue((uint8_t*)BNO055_quat,32)如果您使用的是Arduino,默认情况下,它的
sprintf()
实现不支持浮点。如果使用platformIO作为IDE,则可以添加
build\u标志
以添加浮点支持。有关详细信息,请参阅我的。