节点代码的流程

由代码可知,定时器2的中断时间为1s,定时器3的中断时间为0.5s,定时器4的中断时间为0.1s,中断优先级大小为:定时器2>定时器4>定时器3

1.上电后,节点先接收屏之前存储的数据,由节点的串口3来接收,此时串口3发生中断,将串口3接收到的数据存到数组COM_HC12_data[COM_HC12_data_cp]

屏会先后地给节点下发它原来储存的延时数据、控制模式和电源状态,所以每发一回,串口3就会发生一次中断



2. 0.1s后定时器4发生中断,进入receiveuart3()函数,开始解析之前芯片存储的数据(delay_time,mode,state)通过控制节点继电器的引脚电平来改成相应的状态,再进入 Lcd_power_display()函数,将实际节点的状态显示在LCD上(mode,state),将模式状态这些数据通过串口3上发给屏,让屏刷新显示

 

3. 0.5s后定时器3发生中断,这期间定时器4也不断地在发生中断,但是由于串口3没有新的数据进入,所以定时器4中断无状态变化,进入定时器3中断的void relay_control()函数,判断检测两个门信号的键值,同时判断是否达到断电延时时间,若已到时则通过控制继电器的引脚来改变状态

4. 1s后定时器2发生中断,但是由于Chack_flag初始为0,所以不往下执行,只有当网关1下发命令后,由节点的串口2来接收,然后串口2发生中断,将串口2接收到的数据存到数组Com_esp_data[Com_esp_data_cp]中,如果接收到了结束符0x2f,则Chack_flag=1

5. 由于Chack_flag=1,所以返回刚才定时器2中断,进入 receiveuart2()函数中,解析网关1下发的数据:ND_ID,ND_Command,END_symboll,之后将nd_ok_station=Busy_station;Chack_flag=0

6. 1s后定时器2又发生中断,因为命令为查询命令,nd_ok_station=Busy_station,进入ND_Station_read()判断节点状态,再继续往下执行reply_background(Reach_Command)函数,命令为查询命令,将ND_ID,Command,Check_code,Total_Length,ND_name,Source_Stat,Result,END_symbol存到数组B2G_NDsta_send_Message[]里

7. 最后将这组数据发到串口2里,串口2通过485线上报给网关1,网关1再把数据上报给网关2,然后将nd_ok_station=Free_station

到此,已经完成一轮节点读取液晶屏信息,控制继电器和接收网关1的命令并上报数据






  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值