#include "McuNHN206ADrv.h" #include #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; }