当用户PC端监控程序关闭时,系统需要传递消息给Arduino控制板,将Arduino核心控制板程序中的autoControl的变量置为true,切换到底层自主运行模式,让其自主运行本系统,独立处于传感器中的信息并控制教室内的用电器。在此,以防远端发送断开连接信息传输失败,系统处于远程监控模式下,且Arduino控制板将处于无限制监听等待PC端发来的信息,从而导致系统崩溃,无法处于传感器中的信息并控制教室内的用电器,需要一个计时器来计时,底层UDP端口监听超过一定时间,本系统将自动从远程监控模式下切换到底层自主运行模式下运行。
自主运行模式功能实现代码如下:
if(autoControl) //自主模式标志boolean变量
{
if(isPeople>1)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW); //日光灯智能控制
if(temperature>referenceTemp) //温度传感器中的温度与阈值温度进行对比
digitalWrite (Temp_led,HIGH);
else
digitalWrite (Temp_led,LOW); //电风扇智能控制
}
3.2.3 远程监控模式下的Socket编程
Arduino控制板中的程序一直处于UDP端口监听状态,是通过先收到PC端数据,后依据该数据进行处理,并上传传感器中的信息至PC监控端。如果数据是用电设备的控制信息,则Arduino控制板将按照控制信息来控制教室内的用电器,同时上传传感器中的信息到PC端;如果数据是远程监控启动,则Arduino控制板将直接上传感器中的信息到PC端;如果数据是远程监控关闭信息,则Arduino控制板将把自主运行模式标志信息置为true,切换到自主运行模式下运行,Arduino控制板自行处理感应器中的信息,控制教室内的用电设备。其中涉及的通信代码如下:
int packetSize = Udp.available();
if(packetSize)
{
autoControl=false;
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE,remoteIp,
remotePort);
switch(packetBuffer[0])//对远程监控端的信息进行处理
{
case '0':digitalWrite(LED, LOW); digitalWrite (Temp_led,LOW);
Udp.sendPacket( sendBuffer, remoteIp, remotePort); break;
case '1':digitalWrite(LED, LOW); digitalWrite (Temp_led,HIGH);
Udp.sendPacket( sendBuffer, remoteIp, remotePort); break;
case '2':digitalWrite(LED, HIGH); digitalWrite (Temp_led,LOW);
Udp.sendPacket( sendBuffer, remoteIp, remotePort); break;
case '3':digitalWrite(LED, HIGH); digitalWrite (Temp_led,HIGH);
Udp.sendPacket( sendBuffer, remoteIp, remotePort); break;
case '4':autoControl=true; Serial.println("Remote monitoring has been closed!");break; //远程监控开关
case '5'://远程监控开启
Serial.println("Remote monitoring has been started!");
Udp.sendPacket( sendBuffer, remoteIp, remotePort); break; Arduino教室节能装置的开发+文献综述(8):http://www.751com.cn/zidonghua/lunwen_5583.html