# V0.3 完成DHT10驱动函数,但是数据目前异常,等待排除硬件问题
This commit is contained in:
86
Lib/dht10.c
86
Lib/dht10.c
@ -0,0 +1,86 @@
|
||||
#include "dht10.h"
|
||||
|
||||
uint16_t dht10_data_temperature; // 温度 100 倍
|
||||
uint16_t dht10_data_humidity; // 湿度 100 倍
|
||||
|
||||
void
|
||||
DHT10_Init ()
|
||||
{
|
||||
DelayUs (1);
|
||||
}
|
||||
|
||||
void
|
||||
DHT10_ReadData ()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
uint8_t buffer[6] = { 0 };
|
||||
|
||||
uint32_t hum_or_temp_raw;
|
||||
|
||||
// 发送启动测量命令
|
||||
IIC_Start ();
|
||||
IIC_SendByte (DHT10_ADDR << 1); // 发送设备地址+写
|
||||
// 发送命令字节
|
||||
IIC_SendByte (0xAC);
|
||||
IIC_SendByte (0x33);
|
||||
IIC_SendByte (0x00);
|
||||
|
||||
IIC_Stop ();
|
||||
|
||||
// 等待测量完成(DHT10需至少75ms)
|
||||
DelayMs (80);
|
||||
|
||||
// 读取6字节数据
|
||||
IIC_Start ();
|
||||
IIC_SendByte ((DHT10_ADDR << 1) | 1);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
buffer[i] = IIC_RecvByte ();
|
||||
// 前5字节发送Ack,第6字节发送NAck
|
||||
if (i < 5)
|
||||
IIC_SendAck (1);
|
||||
else
|
||||
IIC_SendAck (0);
|
||||
}
|
||||
IIC_Stop ();
|
||||
|
||||
// 校验和:前5字节之和的低8位
|
||||
i = buffer[0] + buffer[1] + buffer[2] + buffer[3] + buffer[4];
|
||||
if (i != buffer[5])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析20位湿度数据(buffer[2]高4位为湿度数据)
|
||||
hum_or_temp_raw = ((uint32_t)buffer[0] << 12) | ((uint32_t)buffer[1] << 4)
|
||||
| (buffer[2] >> 4);
|
||||
|
||||
// 转换为实际值
|
||||
// dht10_data->humidity = (float)hum_raw / 10.0f; // 湿度 实际值
|
||||
dht10_data_humidity = (uint16_t)(hum_or_temp_raw * 10.0f); // 湿度 100倍
|
||||
|
||||
// 解析20位温度数据(buffer[5]高4位为温度数据)
|
||||
hum_or_temp_raw = ((uint32_t)buffer[3] << 12) | ((uint32_t)buffer[4] << 4)
|
||||
| (buffer[5] >> 4);
|
||||
|
||||
dht10_data_temperature
|
||||
= (uint16_t)(hum_or_temp_raw * 10.0f) - 4000; // 温度 100倍
|
||||
// dht10_data->temperature = (float)temp_raw / 10.0f - 40.0f; // 温度
|
||||
// 实际值
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
DHT10_GetTemperature ()
|
||||
{
|
||||
return dht10_data_temperature;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
DHT10_GetHumidity ()
|
||||
{
|
||||
return dht10_data_humidity;
|
||||
}
|
||||
|
Reference in New Issue
Block a user