20230731_XiaoFuZi_emb/ZheDaXiaoFuZi/Src/Usr/Driver/Ldrv/NHN-206A/McuNHN206ADrv.c
Rjh913828050 a8560d741e 类型:重构
内容:重新整理项目文件分类
人员:任家豪
2023-10-08 16:10:23 +08:00

45 lines
1.3 KiB
C

#include "McuNHN206ADrv.h"
#include <string.h>
#define MCU_NHN206A_DRV_DATA_ADDRESS 0x0000
int McuHNH206ADrvGetValue(HNH206A_OBJ *BlueObj)
{
uint32_t tmp = 0;
uint32_t tmp1 = 0;
float tmp2 = 1.0f;
int i = 0;
uint16_t Crc16 = 0xffff;
uint8_t wdata[8] = {0x06,0x03,0x00,0x00,0x00,0x04,0x00,0x00};
uint8_t rdata[13] = {0};
wdata[2] = MCU_NHN206A_DRV_DATA_ADDRESS & 0xff00;
wdata[3] = MCU_NHN206A_DRV_DATA_ADDRESS & 0x00ff;
BlueObj->Crc(wdata, 6, &Crc16);
wdata[6] = (uint8_t)(Crc16 & 0x00ff);
wdata[7] = (uint8_t)((Crc16 & 0xff00) >> 8);
BlueObj->Nnh206aSend(wdata, sizeof(wdata));
BlueObj->Nnh206aRecv(rdata, sizeof(rdata));
Crc16 = 0xffff;
BlueObj->Crc(rdata, 11, &Crc16);
if (Crc16 != ((((uint16_t)rdata[12]) << 8) | rdata[11])) {
return -1;
}
/* 获取氨氮 */
tmp = ((uint16_t)rdata[3] << 8) | ((uint16_t)rdata[4]);
tmp1 = ((uint16_t)rdata[5] << 8) | ((uint16_t)rdata[6]);
for (i = 0; i < tmp1; i++) {
tmp2 = tmp2 * 10;
}
BlueObj->Nhn = tmp / tmp2;
/* 获取温度值 */
tmp = ((uint16_t)rdata[7] << 8) | ((uint16_t)rdata[8]);
tmp1 = ((uint16_t)rdata[9] << 8) | ((uint16_t)rdata[10]);
tmp2 = 1.0f;
for (i = 0; i < tmp1; i++) {
tmp2 = tmp2 * 10;
}
BlueObj->Temp = tmp / tmp2;
return 0;
}