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