標題:
基于STM32+FDC2214的手勢識別程序,OLED顯示,音樂播放
[打印本頁]
作者:
qjm
時間:
2019-1-16 19:31
標題:
基于STM32+FDC2214的手勢識別程序,OLED顯示,音樂播放
本設(shè)計以STM32F103ZET6為主控芯片,TI公司的FDC2214芯片傳感模塊為手勢識別傳感器模塊,0.96寸OLED為識別結(jié)果顯示模塊,XY-V17B為語音播報模塊,設(shè)計了一種手勢識別裝置。利用覆銅板感應(yīng)手勢,感應(yīng)信號送入FDC2214芯片,單片機讀取FDC2214采集的信息數(shù)據(jù),對讀取的數(shù)據(jù)進行軟件濾波,濾波算法包含算數(shù)平均濾波、中位值濾波法等。測試結(jié)果表明:該作品實現(xiàn)了學(xué)習(xí)、猜拳、劃拳手勢的準確判別,并擴展了語音播報結(jié)果和特定手勢播放特定音樂等相關(guān)功能。
STM32單片機源程序如下:
#include "bsp.h"
#include "stmflash.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "oled.h"
#include "usart.h"
#include "XYV17B.h"
int ChValue[4] = {0};
const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
int xuexi_value[8];//學(xué)習(xí)值保存
int xuexi_read_value[8];//學(xué)習(xí)值讀取
#define FLASH_SAVE_ADDR 0X08070000 //設(shè)置FLASH 保存地址(必須為偶數(shù))
#define SIZE1 sizeof(xuexi_value)
/*******************************************************************************
* 函數(shù)名 : main
* 描述 : 主函數(shù)
* 輸入?yún)?shù) : 無
* 返回參數(shù) : 無
*******************************************************************************/
int main()
{
int x1=100,x2=100,y1=30,y2=30,y3=30,y4=30;
delay_init();
uart_init(9600);
IIC_Init();
OLED_Init(); //初始化oled
delay_ms(100);
KEY_Init(); //初始化KEY
//InitSingleFDC2214();//初始化單通道
InitMultiFDC2214();
OLED_Clear();
XYV17B_init();
//////////////////////////////學(xué)習(xí)
if(xuexi==0)
{
delay_ms(100);
if(xuexi==0)
{
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)xuexi_value,SIZE1);
SC_black_Init();
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)xuexi_value,SIZE1);
while(1)
{
OLED_Clear();//清屏
OLED_ShowString(0,0,"OK!");
while(1)
{
printf("石頭=%d\n",xuexi_value[0]);
printf("剪刀=%d\n",xuexi_value[1]);
printf("布=%d\n",xuexi_value[2]);
printf("1=%d\n",xuexi_value[3]);
printf("2=%d\n",xuexi_value[4]);
printf("3=%d\n",xuexi_value[5]);
printf("4=%d\n",xuexi_value[6]);
printf("5=%d\n",xuexi_value[7]);
delay_ms(5000);
}
}
}
}
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)xuexi_read_value,SIZE1);//讀取flash的值
////////////////////////定義范圍////////////////////////////////
x1=(xuexi_read_value[1]-xuexi_read_value[0])/2;
x2=(xuexi_read_value[0]-xuexi_read_value[2])/2;
y1=(xuexi_read_value[3]-xuexi_read_value[4])/2;
y2=(xuexi_read_value[4]-xuexi_read_value[5])/2;
y3=(xuexi_read_value[5]-xuexi_read_value[6])/2;
y4=(xuexi_read_value[6]-xuexi_read_value[7])/2;
////////////////////////讀取flash的值////////////////////////////////////////
while(0)
{
printf("石頭=%d\n",xuexi_value[0]);
printf("剪刀=%d\n",xuexi_value[1]);
printf("布=%d\n",xuexi_value[2]);
printf("1=%d\n",xuexi_value[3]);
printf("2=%d\n",xuexi_value[4]);
printf("3=%d\n",xuexi_value[5]);
printf("4=%d\n",xuexi_value[6]);
printf("5=%d\n",xuexi_value[7]);
delay_ms(5000);
}
qumu(1);//曲目 1-20
//void STOP_music();
/////////////////////主程序//////////////////////////////////////////////////
while(1)
{
OLED_Clear();
// KEY_value();
// ChValue[0] = FDC2X14ReadCH(1);
// ChValue[1] = FDC2X14ReadCH(2);
// ChValue[2] = FDC2X14ReadCH(3);
// ChValue[3] = Filter4();
OLED_ShowNum(0,6,ChValue[3],10,16);
ChValue[3] = FDC2X14ReadCH(4)/1000;
// OLED_ShowNum(30,3,ChValue[3],7,16);
if(moshiqiehuan==0)//猜拳
{
//清屏
//if(ChValue[3]>=8700000&&ChValue[3]<=8900000)
if(ChValue[3]>=(xuexi_read_value[0]-x2)&&ChValue[3]<=(xuexi_read_value[0]+x1))
{
OLED_ShowCHinese(30,3,1);
OLED_ShowCHinese(50,3,2);//石頭
printf("石頭=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[1]-x1)&&ChValue[3]<=(xuexi_read_value[1]+500))
{
OLED_ShowCHinese(45,3,3);
OLED_ShowCHinese(65,3,4);//剪刀
printf("剪刀=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[2]-500)&&ChValue[3]<=(xuexi_read_value[2]+x2))
{
OLED_ShowCHinese(60,3,5);//布
printf("布=%d\n",ChValue[3]);
}
else
{
OLED_ShowString(0,0,"Error!");
printf("Error=%d\n",ChValue[3]);
}
}
if(moshiqiehuan==1)//劃拳
{
if(ChValue[3]>=(xuexi_read_value[3]-y1)&&ChValue[3]<=(xuexi_read_value[3]+200))
{
OLED_ShowNum(0,3,1,1,16);
printf("1=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[4]-y2)&&ChValue[3]<(xuexi_read_value[4]+y1))
{
OLED_ShowNum(15,3,2,1,16);
printf("2=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[5]-y3)&&ChValue[3]<=(xuexi_read_value[5]+y2))
{
OLED_ShowNum(30,3,3,1,16);
printf("3=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[6]-y4)&&ChValue[3]<=(xuexi_read_value[6]+y3))
{
OLED_ShowNum(45,3,4,1,16);
printf("4=%d\n",ChValue[3]);
}
else
if(ChValue[3]>=(xuexi_read_value[7]-500)&&ChValue[3]<=(xuexi_read_value[7]+y4))
{
OLED_ShowNum(60,3,5,1,16);
printf("5=%d\n",ChValue[3]);
}
else
{
OLED_ShowString(0,0,"Error!");
printf("Error=%d\n",ChValue[3]);
}
}
//delay_ms(10);
}
}
復(fù)制代碼
所有資料51hei提供下載:
7.22 - 副本.7z
(206.42 KB, 下載次數(shù): 108)
2019-1-17 04:09 上傳
點擊文件名下載附件
基于FDC2214手勢識別,OLED顯示,音樂播放
下載積分: 黑幣 -5
作者:
nb44444
時間:
2019-3-4 00:00
厲害了,來學(xué)習(xí)學(xué)習(xí)
作者:
lihui2558
時間:
2019-3-5 14:37
下載學(xué)習(xí)一下
作者:
lihui2558
時間:
2019-3-6 13:16
這個手勢傳感模塊應(yīng)該不便宜吧
作者:
13574103468
時間:
2019-6-3 14:57
下載了,先學(xué)一波
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1