📄 action.c
字号:
/**********************************************************************
* System Name DOOR
* Source Name action.c
* Function 人的动作
* Version Date Editor Modification
* 1.0 2007/05/10 周斌 做成
**********************************************************************/
#include "global.h"
#include "uart0.h"
//各种传感器状态下的位置值
/*
0 :0000 :0 //0表示无效值
1 :0001 :7
2 :0010 :5
3 :0011 :6
4 :0100 :3
5 :0101 :0
6 :0110 :4
7 :0111 :5
8 :1000 :1
9 :1001 :0
10 :1010 :0
11 :1011 :0
12 :1100 :2
13 :1101 :0
15 :1110 :3
16 :1111 :4
*/
UCHAR position_value[16]={0,7,5,6,3,0,4,5,1,0,0,0,2,0,3,4};
/**********************************************************************
* Function Name action_judge
* Function Desc 判断动作:出、入
* Return Value 无
* Parameter
t_ir:红外传感器值
* Version Date Editor Modification
* 1.0 2007/05/10 周斌 做成
**********************************************************************/
void action_judge(UCHAR t_ir)
{
static UCHAR last_valid; //上次的有效值
static UCHAR this_valid; //本次有效值
static UCHAR unvalid_count; //无效值计数,出现100个无效值表示一个人出入结束
static UCHAR move_value = 128; //本次检测的人的移动值,初始值128
if(position_value[t_ir]!=0)//如果是有效值
{
this_valid = position_value[t_ir]; //保存有效值
unvalid_count=0; //清空无效值计数
if(this_valid!=last_valid) //如果是新的有效值
{
//移动计算
if(last_valid != 0)
{
move_value += this_valid;
move_value -= last_valid;
}
last_valid = this_valid;
}
}
else
{
if(unvalid_count<10)
{
unvalid_count++;
}
else
{
//根据结果判断出入
if(move_value>=132) //大于130表示进
{
uart0_put_string("ENTER\r\n");
move_value=128; //复位移动值
}
else if(move_value<=124) //小于126表示出
{
uart0_put_string("EXIT\r\n");
move_value=128; //复位移动值
}
last_valid = 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -