|
|
|
|
|
|
|
#include "task_bedalarm.h"
|
|
|
|
#include "app_config.h"
|
|
|
|
#include "../msp/uart/msp_uart1.h"
|
|
|
|
#include "../bsp/TTSSbsp/bsp_config.h"
|
|
|
|
|
|
|
|
|
|
|
|
S_TASK_Bed_ALARM _s_task_bed_alarm;
|
|
|
|
|
|
|
|
// A5 5A 08 82 06 D3 01 00 00 FF 7D 清除报警图标
|
|
|
|
SCRSetPkg scrPkgAlarmClearPkg = {
|
|
|
|
0xA5, 0x5A,
|
|
|
|
0x08, //指令字节长度(不含帧头)
|
|
|
|
0x82, //指令
|
|
|
|
0x06, 0xD3, //变量存储地址
|
|
|
|
0x01, //数据字长度
|
|
|
|
0x00,0x00, // 数据内容
|
|
|
|
0xFF,0x7D, // CRC
|
|
|
|
};
|
|
|
|
|
|
|
|
//=============================================
|
|
|
|
void L3_task_bed_alarm_init(void)
|
|
|
|
{
|
|
|
|
L1_task_init(&_s_task_bed_alarm.task);
|
|
|
|
_s_task_bed_alarm.mode_flag = R.LeaveForbid_flag;
|
|
|
|
_s_task_bed_alarm.times = 6; //经过测试_s_task_bed_alarm.times = 10时,判断时长为2.5s;_s_task_bed_alarm.times = 6时,判断时长为1.5s
|
|
|
|
L3_task_s_go(_s_task_bed_alarm,D_task_init);
|
|
|
|
}
|
|
|
|
|
|
|
|
#define D_task_JUDGE 0x50
|
|
|
|
#define D_task_ALARM_DELETE 0x51
|
|
|
|
// _____beep-on_____模式开_____beep-off___
|
|
|
|
// 离床作为主体,beep为辅 _____模式关_____/ \____模式关___
|
|
|
|
void L3_task_bed_alarm_handler(S_TASK_Bed_ALARM *s)
|
|
|
|
{
|
|
|
|
TTSS_Task_init():
|
|
|
|
L2_task_go(D_task_JUDGE);
|
|
|
|
//判定是否触发报警
|
|
|
|
TTSS_Task_step(D_task_JUDGE):
|
|
|
|
//模式开启情况下,蜂鸣器不响的时候
|
|
|
|
if(R.LeaveForbid_flag == LeaveForbid_OPEN && R.beep == beep_off)
|
|
|
|
{
|
|
|
|
// R.weight.differ = R.Weight_Ref - D_get_weight();
|
|
|
|
R.weight.differ = R.Weight_Ref - R.weight.kgx10_out; //串口对外输出的重量值的前后差值来判断
|
|
|
|
// 检测到体重变化超10kg
|
|
|
|
if(R.weight.differ > 50) // 50 5kg 100 10kg
|
|
|
|
{
|
|
|
|
L0_uart1_str(" After Compare 50, s->times = ");
|
|
|
|
L0_uart1_uchex(s->times);
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
if(--s->times == 0)
|
|
|
|
{
|
|
|
|
R.beep = beep_on;
|
|
|
|
L0_uart1_str("Enter Alarm->");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
R.beep_startime = D_sys_now;
|
|
|
|
s->times = 6;
|
|
|
|
}
|
|
|
|
L0_uart1_str("After Count 10, s->times = ");
|
|
|
|
L0_uart1_uchex(s->times);
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
s->times = 6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//模式开启情况下,蜂鸣器响的时候
|
|
|
|
if (R.LeaveForbid_flag == LeaveForbid_OPEN && R.beep == beep_on)
|
|
|
|
{
|
|
|
|
// 检测到时间超时
|
|
|
|
if (D_sys_now - R.beep_startime > D_COUNT_JIFFIES(30000))
|
|
|
|
{
|
|
|
|
R.beep = beep_off;
|
|
|
|
L0_uart1_str("Overtime!! Quit Alarm ->");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
R.Weight_Ref = 0;
|
|
|
|
R.beep_startime = 0;
|
|
|
|
R.LeaveForbid_flag = LeaveForbid_OFF;
|
|
|
|
//A5 5A 08 83 06 D3 01 00 00 FE AC解除报警时,清除图标
|
|
|
|
L1_uart1_Array((U8 *)&scrPkgAlarmClearPkg, sizeof(scrPkgAlarmClearPkg));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 模式标志为关闭
|
|
|
|
if (R.LeaveForbid_flag == LeaveForbid_OFF)
|
|
|
|
{
|
|
|
|
// 而上一刻的是打开,说明是手动解除报警
|
|
|
|
if (_s_task_bed_alarm.mode_flag == LeaveForbid_OPEN)
|
|
|
|
{
|
|
|
|
if (R.beep == beep_on)
|
|
|
|
{
|
|
|
|
R.beep = beep_off;
|
|
|
|
L0_uart1_str("Manually dismiss! Quit Alarm ->");
|
|
|
|
}
|
|
|
|
L0_uart1_str("Manually dismiss mode!!");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
R.Weight_Ref = 0;
|
|
|
|
R.beep_startime = 0;
|
|
|
|
L1_uart1_Array((U8 *)&scrPkgAlarmClearPkg, sizeof(scrPkgAlarmClearPkg));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
// 模式标志为打开
|
|
|
|
else if (R.LeaveForbid_flag == LeaveForbid_OPEN)
|
|
|
|
{
|
|
|
|
// 而上一刻的是关闭,说明是手动打开了模式
|
|
|
|
if (_s_task_bed_alarm.mode_flag == LeaveForbid_OFF)
|
|
|
|
{
|
|
|
|
// R.Weight_Ref = D_get_weight();//记录下参考重量(计算出的实际重量值)
|
|
|
|
R.Weight_Ref = R.weight.kgx10_out;//记录下参考重量(串口输出的重量值)
|
|
|
|
L0_uart1_str("LeaveForbid_OPEN!!!");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_s_task_bed_alarm.mode_flag = R.LeaveForbid_flag;
|
|
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_JUDGE, D_Tdelay_200ms);
|
|
|
|
|
|
|
|
TTSS_Task_end();
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
R.weight.differ = R.Weight_Ref - R.weight.kgx10_out;
|
|
|
|
if(R.LeaveForbid_flag == LeaveForbid_OPEN)
|
|
|
|
{ //触发报警 //取绝对值abs();
|
|
|
|
if( R.weight.differ > 50 ) //&& R.beep != beep_on R.weight.differ
|
|
|
|
{
|
|
|
|
L0_uart1_str("R.weight.differ:");
|
|
|
|
L0_uart1_ushex(R.weight.differ);
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
L0_uart1_str("R.Weight_Ref:");
|
|
|
|
L0_uart1_ushex(R.Weight_Ref);
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
|
|
|
|
R.beep = beep_on;
|
|
|
|
// D_LED1_ON();
|
|
|
|
L0_uart1_str("Enter Alarm->");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
R.beep_startime = D_sys_now;
|
|
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_ALARM_DELETE, D_Tdelay_200ms);
|
|
|
|
}
|
|
|
|
//未触发报警
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
L2_task_go_Tdelay(D_task_ALARM_JUDGE, D_Tdelay_200ms);
|
|
|
|
}
|
|
|
|
|
|
|
|
//判定是否解除报警
|
|
|
|
TTSS_Task_step(D_task_ALARM_DELETE):
|
|
|
|
//超时解除
|
|
|
|
if(D_sys_now - R.beep_startime > D_COUNT_JIFFIES(30000)) //5000 5秒 30000 30秒
|
|
|
|
{
|
|
|
|
R.beep = beep_off;
|
|
|
|
L0_uart1_str("Overtime!! Jump Alarm ->");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
// D_LED1_OFF();
|
|
|
|
R.beep_startime = 0;
|
|
|
|
R.LeaveForbid_flag = LeaveForbid_OFF;
|
|
|
|
//A5 5A 08 83 06 D3 01 00 00 FE AC解除报警时,清除图标
|
|
|
|
// L1_uart1_Array((U8 *)&scrPkgAlarmClearPkg, sizeof(scrPkgAlarmClearPkg));
|
|
|
|
L2_task_go_Tdelay(D_task_ALARM_JUDGE, D_Tdelay_200ms);
|
|
|
|
}
|
|
|
|
else if(R.LeaveForbid_flag == LeaveForbid_OFF)
|
|
|
|
{
|
|
|
|
R.beep = beep_off;
|
|
|
|
L0_uart1_str("Manually dismiss!! Jump Alarm->");
|
|
|
|
L0_uart1_0d0a();
|
|
|
|
// D_LED1_OFF();
|
|
|
|
R.beep_startime = 0;
|
|
|
|
// R.LeaveForbid_flag = LeaveForbid_OFF;
|
|
|
|
//A5 5A 08 83 06 D3 01 00 00 FE AC解除报警时,清除图标
|
|
|
|
// L1_uart1_Array((U8 *)&scrPkgAlarmClearPkg, sizeof(scrPkgAlarmClearPkg));
|
|
|
|
L2_task_go_Tdelay(D_task_ALARM_JUDGE, D_Tdelay_200ms);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
L2_task_go_Tdelay(D_task_ALARM_DELETE, D_Tdelay_200ms);
|
|
|
|
* */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|