ZigBee无线通信网络软件毕业设计 - 图文 下载本文

通过响应“ERH”可以从网络外部读取到湿度信息。节点处理“ERH”命令的具体代码如下:

memcpy(RfTx.TxBuf, RfRx.RxBuf, 14); temp1 = Read_SHT1X(5);

RfTx.TXDATA.DataBuf[0] = (uint8) (temp1>>8); RfTx.TXDATA.DataBuf[1] = (uint8) (temp1&0xff); RfHaveTxDara = 1; //指示有数据需要发送

通过遥感按键可以将湿度传感节点和水泵节点绑定,可以根据湿度的采样值,来控制水泵工作状态,同样在周期事件中对湿度值进行了监测,其代码如下:

else if(SensorNum == 2) //处理湿度 {

f1 = Read_SHT1X(5); //读取湿度 f1 = f1 * 0.0405 - 4 - f1 * f1 * 2.8 * 0.000001; ch1 = (uint16)f1; if(ch1 < humThreshold) {

SampleApp_SendControlMsg(\} else {

SampleApp_SendControlMsg(\} }

humThreshold保存了湿度阈值,当读到的湿度信息与该阈值进行比较,当湿度值小于阈值则发送‘1’,来控制水泵打开,当湿度值大于阈值时则发送‘0’,来控制水泵停止。

具体在水泵节点端需要做相关的控制处理,对应代码如下: case CONTROL_PUMP: if(pkt->cmd.Data[0] == '0') {

P1_4 = 0; //关闭水泵

48

pumpOpen = 0;

LcdPutString16_8(0, 0, (void*)\}

else if(pkt->cmd.Data[0] == '1') {

P1_4 = 1; //打开水泵 pumpOpen = 1;

LcdPutString16_8(0, 0, (void*)\} break;

对‘1’和‘0’的处理就对应的将P1.4脚设置成“高电平”和“低电平”。即控制继电器的开合,从而对应到水泵工作与停止。

(7)二氧化碳浓度的读取与控制

该系统采用的二氧化碳传感器为MG811,该传感器出来的数据为模拟信号,通过必要的放大处理在接到CC2530的ADC的通道0引脚上,通过读AD值让后进行必要计算即可得到CO2的浓度值。其读二氧化碳浓度的代码如下:

int16 GetCo2Value(void) {

int16 adc_value, cdisplay, ppm; double c, ppmdou;

adc_value = HalAdcRead(0, HAL_ADC_RESOLUTION_12); c = ((double)adc_value*(3300.0/2048.0)); //换算成电压值 cdisplay = (int)(c); //return cdisplay; if(cdisplay>1072) {

ppm=400; }

if((1049

ppmdou = (500-((cdisplay-1049)*(100/(1072-1049)))); ppm = (int)ppmdou;

49