当用户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;
- 上一篇:AT89S52单片机智能小车控制系统设计+电路图
- 下一篇:LabVIEW飞行器模型静态参数测试台设计方法研究
-
-
-
-
-
-
-
中国传统元素在游戏角色...
江苏省某高中学生体质现状的调查研究
NFC协议物理层的软件实现+文献综述
g-C3N4光催化剂的制备和光催化性能研究
巴金《激流三部曲》高觉新的悲剧命运
现代简约美式风格在室内家装中的运用
C++最短路径算法研究和程序设计
高警觉工作人群的元情绪...
上市公司股权结构对经营绩效的影响研究
浅析中国古代宗法制度