我目前正在开展一个需要读出DHT11 humidity and temperature sensor的项目。 MCU和串行设备之间的通信非常低级,但我设法接收测量值(湿度+温度)作为长度为4的字节数组(第5个字节是校验和):
我从DHT11传感器收到的值:
- byte[0] = humidity integer part
- byte[1] = humidity decimal part
- byte[2] = temperature integer part
- byte[3] = temperature decimal part
- byte[4] = checksum of the first four bytes
我现在想将byte[0]
和byte[1]
转换为浮点数,温度相同(byte [2]和byte [3])。在C / C ++的Arduino Mega 2560上实现这一目的的有效方法是什么?
示例:
byte[0] = 20 and byte[1] = 12 => 20.12 [float]
答案 0 :(得分:5)
不幸的是,链接数据表中提供的两个示例都为小数部分发送了零。但是,从描述中可以看出,来自高位字节的数据可以添加到低位字节的数据除以256(数据的小数部分中的状态数):
const float scale = 256.0;
float humidity = byte[0] + (byte[1] / scale);
float temperature = byte[2] + (byte[3] / scale);