27,375
社区成员
发帖
与我相关
我的任务
分享
#include "stc15f2k60s2.h"
#include "GesturePAJ7620.h"
#include "oled.h"
#include "GesturePAJ7620.c"
#include "oled.c"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define GES_REACTION_TIME 200 // You can adjust the reaction time according to the actual circumstance.
#define GES_ENTRY_TIME 500 // When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES_ENTRY_TIME(0.8s).
#define GES_QUIT_TIME 1000
#define Delay_2us() _nop_();_nop_();_nop_();_nop_()
uchar GestureValue = 0;
unsigned char send_data;
void GestureRecognition(void);
void Delay_ms(uint ms);
void send_init();
//***********************主程序******************************
void main(void)
{
OLED_Init(); //OLED 初始化
OLED_Clear(); //OLED清屏
Delay_ms(2000);
OLED_Clear(); //OLED清屏
GestureValue = 0;
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(8, 4,"Wating...");//
Delay_ms(1000);
paj7620Init();//手势模块 初始化
send_init();
Delay_ms(200);
while(1)
{
GestureRecognition();
mcu_led = ~mcu_led;
SBUF=GestureValue;
while(!TI); //卡死在这里。。。。。。。。。。。。。。
TI=0;
}
}
/**********************************************************************/
void send_init()
{
TMOD =0x20; //设定T1定时器工作方式2
TH1=0xfd; //T1定时器装初值
TL1=0xfd; //T1定时器装初值
TR1=1; //启动T1定时器
SCON =0x40; //SM0=0 SM1=1串行口寄存器工作方式1,REN=1允许串口接收
PCON=0x00; //SMOD设置为0
EA=1; //开总断
ES=1; //开串口中断
}
void GestureRecognition(void)
{
GestureData = paj7620ReadReg(0x43,1); // Read Bank_0_Reg_0x43/0x44 for gesture result.
if(GestureData!=0xFF)
{
switch (GestureData) // When different gestures be detected, the variable 'data' will be set to different values by paj7620ReadReg(0x43, 1, &data).
{
case GES_RIGHT_FLAG:
Delay_ms(GES_ENTRY_TIME);
GestureData=paj7620ReadReg(0x43, 1);
if(GestureData == GES_FORWARD_FLAG)
{
GestureValue = 5;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Forward");//
Delay_ms(GES_QUIT_TIME);
}
else if(GestureData == GES_BACKWARD_FLAG)
{
GestureValue = 6;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Backward");//
Delay_ms(GES_QUIT_TIME);
}
else
{
GestureValue = 4;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Right");//
}
break;
case GES_LEFT_FLAG:
Delay_ms(GES_ENTRY_TIME);
GestureData=paj7620ReadReg(0x43, 1);
if(GestureData == GES_FORWARD_FLAG)
{
GestureValue = 5;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Forward");//
Delay_ms(GES_QUIT_TIME);
}
else if(GestureData == GES_BACKWARD_FLAG)
{
GestureValue = 6;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Backward");//
Delay_ms(GES_QUIT_TIME);
}
else
{
GestureValue = 3;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Left");//
}
break;
case GES_UP_FLAG:
Delay_ms(GES_ENTRY_TIME);
GestureData=paj7620ReadReg(0x43, 1);
if(GestureData == GES_FORWARD_FLAG)
{
GestureValue = 5;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Forward");//
Delay_ms(GES_QUIT_TIME);
}
else if(GestureData == GES_BACKWARD_FLAG)
{
GestureValue = 6;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Backward");//
Delay_ms(GES_QUIT_TIME);
}
else
{
GestureValue = 1;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Up");//
}
break;
case GES_DOWN_FLAG:
Delay_ms(GES_ENTRY_TIME);
GestureData=paj7620ReadReg(0x43, 1);
if(GestureData == GES_FORWARD_FLAG)
{
GestureValue = 5;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Forward");//
Delay_ms(GES_QUIT_TIME);
}
else if(GestureData == GES_BACKWARD_FLAG)
{
GestureValue = 6;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Backward");//
Delay_ms(GES_QUIT_TIME);
}
else
{
GestureValue = 2;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Down");//
}
break;
case GES_FORWARD_FLAG:
GestureValue = 5;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Forward");//
Delay_ms(GES_QUIT_TIME);
break;
case GES_BACKWARD_FLAG:
GestureValue = 6;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Backward");//
Delay_ms(GES_QUIT_TIME);
break;
case GES_CLOCKWISE_FLAG:
GestureValue = 7;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Clockwise");//
break;
case GES_COUNT_CLOCKWISE_FLAG:
GestureValue = 8;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"anti-clockwise");//
break;
default:
GestureData=paj7620ReadReg(0x44, 1);
if (GestureData == GES_WAVE_FLAG)
{
GestureValue = 9;
OLED_Clear();
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(2, 3,"Wave");//
}
else
GestureValue = 0;
break;
}
if(GestureValue!=0)
{
// GestureHandleFun();
}
}
}
void Delay_ms(unsigned int ms)
{
unsigned int De_Cnt;
while( (ms--) != 0)
{
for(De_Cnt = 0; De_Cnt < 600; De_Cnt++);
}
}
void main(void)
{
OLED_Init(); //OLED 初始化
OLED_Clear(); //OLED清屏
Delay_ms(2000);
OLED_Clear(); //OLED清屏
GestureValue = 0;
OLED_ShowString(8, 0,"* Gesture *");//
OLED_ShowString(8, 4,"Wating...");//
Delay_ms(1000);
paj7620Init();//手势模块 初始化
send_init();
tx_flag=0;
TI=0;
Delay_ms(200);
while(1)
{
GestureRecognition();
mcu_led = ~mcu_led;
if(GestureValue!=0)
Send_Char(GestureValue);
}
}void Send_Char(uchar a)
{
tx_flag=1;
SBUF=a;
while(tx_flag==1);
}void send_init()
{
TMOD =0x20; //设定T1定时器工作方式2
TH1=0xfd; //T1定时器装初值
TL1=0xfd; //T1定时器装初值
TR1=1; //启动T1定时器
//ET1=1; //允许T1中断
SCON =0x50; //SM0=0 SM1=1串行口寄存器工作方式1,REN=1允许串口接收
PCON=0x00; //SMOD设置为0
EA=1; //开总断
ES=0; //开串口中断
}void Uart_Is_Send () interrupt 4 using 1
{
if(TI)
{
TI=0;
tx_flag=0;
}
if(RI)
{
RI=0;
}
}