#include "beep_logic_app.h" #include "led.h" #include "beep.h" #include "global_param.h" #include "dw_app.h" #define ONTIME1 1 // 100ms #define OFFTIME1 0 // 100ms #define ONTIME2 1 // 100ms #define OFFTIME2 0 // 100ms #define ONTIME3 5 // 500ms #define OFFTIME3 5 // 500ms int32_t min_dist1,min_dist2; extern u16 JDQ_time; u8 JDQgroup1_state,JDQgroup2_state; void Relay1Task(void) { static u8 distoffset1=0,distoffset2=0; static uint8_t beep_state,timer_state,beep_timer,beep_ontime,beep_offtime; if (min_dist1 <= g_com_map[ALARM_DISTANCE2]+distoffset1) { JDQgroup1_state=2; } else if (min_dist1 <= g_com_map[ALARM_DISTANCE3]+distoffset2) { JDQgroup1_state=1; } else{ JDQgroup1_state=0; } if (min_dist2 <= g_com_map[RELAY2_DISTANCE2]+distoffset1) { JDQgroup2_state=2; } else if (min_dist2 <= g_com_map[RELAY2_DISTANCE3]+distoffset2) { JDQgroup2_state=1; } else{ JDQgroup2_state=0; } if(JDQgroup1_state==2||JDQgroup2_state==2) { beep_ontime = 1; beep_offtime = 0; beep_state=2; distoffset1=0; distoffset2=0; beep_timer = 0; timer_state = 1; }else if(JDQgroup1_state==1||JDQgroup2_state==1) { beep_ontime = JDQ_time; beep_offtime = JDQ_time; beep_state=1; distoffset1=0; distoffset2=0; }else{ beep_state=0; distoffset1=0; distoffset2=0; beep_timer = 0; timer_state = 1; } if(beep_state!=0) { if(timer_state==1) { if(beep_timer++ < beep_ontime) { RELAY2_ON; RELAY1_ON; }else{ timer_state=0; beep_timer=0; } }else{ if(beep_timer++ < beep_offtime) { RELAY2_OFF; RELAY1_OFF; }else{ timer_state=1; beep_timer=0; } } }else { RELAY1_OFF; RELAY2_OFF; } } void Relay2Task(u16 min_dist) { static u8 distoffset12=0,distoffset22=0; static uint8_t beep_state2,timer_state2,beep_timer2,beep_ontime2,beep_offtime2; if (min_dist <= g_com_map[RELAY2_DISTANCE2]+distoffset12) { beep_ontime2 = 1; beep_offtime2 = 0; beep_state2=2; distoffset12=0; distoffset22=0; timer_state2=1; beep_timer2=0; } else if (min_dist <= g_com_map[RELAY2_DISTANCE3]+distoffset22) { beep_ontime2 = JDQ_time; beep_offtime2 = JDQ_time; beep_state2=1; distoffset12=0; distoffset22=0; } else{ beep_state2=0; distoffset12=0; distoffset22=0; timer_state2=1; beep_timer2=0; } if(beep_state2!=0) { if(timer_state2==1) { if(beep_timer2++ < beep_ontime2) { RELAY2_ON; }else{ timer_state2=0; beep_timer2=0; } }else{ if(beep_timer2++ < beep_offtime2) { RELAY2_OFF; }else{ timer_state2=1; beep_timer2=0; } } }else { // RELAY1_OFF; RELAY2_OFF; } } #define RELAY2IDHEAD 9 extern u16 tagid_list[TAG_NUM_IN_SYS]; void main_logic(void) //Ö÷Âß¼­ÔÚÕâÀïÖ´ÐÐ { uint16_t i; //³ýUWBÖ®ÍâµÄÆäËû´úÂë... static uint16_t beep_judge_cnt = 0; if(g_com_map[ALARM_DISTANCE1]!=0||g_com_map[ALARM_DISTANCE2]!=0||g_com_map[ALARM_DISTANCE3]!=0||g_com_map[RELAY2_DISTANCE1]!=0||g_com_map[RELAY2_DISTANCE2]!=0||g_com_map[RELAY2_DISTANCE3]!=0) { if(beep_judge_cnt++ >= 100) { beep_judge_cnt = 0; min_dist1=0x1ffff; min_dist2=0x1ffff; for(i = 0; i < 255;i++) { if((tagid_list[i]>>12)!=RELAY2IDHEAD) { if(g_Tagdist[i] < min_dist1&&g_Tagdist[i]>g_com_map[ALARM_DISTANCE1]) { min_dist1=g_Tagdist[i]; } }else{ if(g_Tagdist[i] < min_dist2&&g_Tagdist[i]>g_com_map[RELAY2_DISTANCE1]) { min_dist2=g_Tagdist[i]; } } } Relay1Task(); // Relay2Task(min_dist2); } }else{ if(g_com_map[RELAY1ON_INDEX]==1) { RELAY1_ON; }else if(g_com_map[RELAY1ON_INDEX]==0) { RELAY1_OFF; } if(g_com_map[RELAY2ON_INDEX]==1) { RELAY2_ON; }else if(g_com_map[RELAY2ON_INDEX]==0) { RELAY2_OFF; } } }