45 lines
1.3 KiB
C
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;
|
||
|
|
}
|