手势识别传感器学习

stm32f103c8t6驱动paj7620手势识别传感器

简单介绍:
手势识别模块采用的是 I2C 通讯,将模块的 SDA,SCL 分别连接 STM32F103C8T6 板子的 PB7 和 PB6 引脚。VCC 和 GND 分别连接 STM32F103C8T6 的 5V 和 GND

首先,先找到一块stm32f103c8t6核心板,如图:
手势识别传感器学习_第1张图片接通电源,采用st-link下载程序,st-link连线示意图如1:
手势识别传感器学习_第2张图片黄线为VCC,蓝线为SWDIO,绿线是SWDCLK,紫线为GND.
代码如下

测试程序
int main(void)
{
	
	unsigned char i;
  unsigned char Gesture_Data;
	
	gotoflag:  ;
	
	/* ÅäÖÃSysTick Ϊ10usÖжÏÒ»´Î */
	SysTick_Init();
	
	//I2C³õʼ»¯
	I2C_Bus_Init();
	//NVIC_Configuration();
	USARTx_Config();
	
	printf("Gesture Sensor Test Program ...\r\n");
	if(!PAJ7620U2_init())
	{
	  printf("\nGesture Sensor Error\r\n");
		goto gotoflag;
		
	}
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

	printf("\nGesture Sensor OK\r\n");
	I2C_ByteWrite(PAJ_BANK_SELECT, 0);		
	for (i = 0; i < Gesture_Array_SIZE; i++)
	{
		I2C_ByteWrite(Init_Gesture_Array[i][0], Init_Gesture_Array[i][1]);//Gesture register initializes
	}
	
	while(1)
	{	
		
		I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
			switch(Gesture_Data)
			{
				case PAJ_UP:
					PAJ_delay(800);
					I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
					if(Gesture_Data == PAJ_FORWARD)
					{
						printf("Forward\r\n");
						PAJ_delay(10000);	
					}
					else if(Gesture_Data == PAJ_BACKWARD)
					{
						printf("Backward\r\n");
						PAJ_delay(10000);					
					}
					else{
							printf("Up\r\n");						
					}
					break;
				case PAJ_DOWN:							
					PAJ_delay(800);
					I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
					if(Gesture_Data == PAJ_FORWARD)
					{
						printf("Forward\r\n");
						PAJ_delay(10000);	
					}
					else if(Gesture_Data == PAJ_BACKWARD)
					{
						printf("Backward\r\n");
						PAJ_delay(10000);					
					}
					else{
						printf("Down\r\n");						
					}				
					break;
				case PAJ_LEFT:							
					PAJ_delay(800);
					I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
					if(Gesture_Data == PAJ_FORWARD)
					{
						printf("Forward\r\n");
						PAJ_delay(10000);	
					}
					else if(Gesture_Data == PAJ_BACKWARD)
					{
						printf("Backward\r\n");
						PAJ_delay(10000);					
					}
					else{
						printf("Left\r\n");					
					}								
					break;
				case PAJ_RIGHT:							
					PAJ_delay(800);
					I2C_BufferRead(PAJ_INT_FLAG1,&Gesture_Data,1);
					if(Gesture_Data == PAJ_FORWARD)
					{
						printf("Forward\r\n");
						PAJ_delay(10000);	
					}
					else if(Gesture_Data == PAJ_BACKWARD)
					{
						printf("Backward\r\n");
						PAJ_delay(10000);					
					}
					else{
						printf("Right\r\n");				
					}					
					break;
				case PAJ_FORWARD:						
					printf("Forward\r\n");
					PAJ_delay(10000);				
					break;
				case PAJ_BACKWARD:					
					printf("Backward\r\n");
					PAJ_delay(10000);					
					break;
				case PAJ_CLOCKWISE:					
					printf("Clockwise\r\n"); 		
					break;
				case PAJ_COUNT_CLOCKWISE:		
					printf("AntiClockwise\r\n"); 
					break;					
								
				default:
						I2C_BufferRead(PAJ_INT_FLAG2,&Gesture_Data,1);
						if(Gesture_Data == PAJ_WAVE)
						{
							printf("Wave\r\n"); 
						}
					break;
		}
			PAJ_delay(1000);			
		
	}
				
}

使用st-link下载程序后,使用串口测试功能,串口通信代码如下,波特率115200,PA9-------TX,PA10---------RX

#ifndef __USART1_H
#define	__USART1_H


#include "stm32f10x.h"
#include 


#define             macUSART_BAUD_RATE                       115200

#define             macUSARTx                                USART1
#define             macUSART_APBxClock_FUN                   RCC_APB2PeriphClockCmd
#define             macUSART_CLK                             RCC_APB2Periph_USART1
#define             macUSART_GPIO_APBxClock_FUN              RCC_APB2PeriphClockCmd
#define             macUSART_GPIO_CLK                        (RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO)     
#define             macUSART_TX_PORT                         GPIOA   
#define             macUSART_TX_PIN                          GPIO_Pin_9
#define             macUSART_RX_PORT                         GPIOA   
#define             macUSART_RX_PIN                          GPIO_Pin_10
#define             macUSART_IRQ                             USART1_IRQn
#define             macUSART_INT_FUN                         USART1_IRQHandler


void USARTx_Config(void);
void NVIC_Configuration(void);
void Usart_SendStr_length( USART_TypeDef * pUSARTx, uint8_t *str,uint32_t strlen );
void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str);
int fputc(int ch, FILE *f);
int fgetc(FILE *f);


#endif /* __USART1_H */

测试串口,打开串口调试助手
注意:这里需要使用usb转ttl,其TX连接stm32f103c8t6的PA10(RX),其RX连接stm32f103c8t6的PA9(TX)
手势识别传感器学习_第3张图片使用usb转ttl后,电脑端口处才会出现CH340,不然端口是无法识别出串口的手势识别传感器学习_第4张图片完成后,打开串口调试助手手势识别传感器学习_第5张图片这时需要按一下stm32f103c8t6的复位键,才会开始串口检测
手势识别传感器学习_第6张图片开始指定手势测试
手势识别传感器学习_第7张图片每次挥动手势都会串口回复,实验成功。

你可能感兴趣的:(笔记,stm32学习,安全)