|
本設(shè)計(jì)以STM32F103ZET6為主控芯片,TI公司的FDC2214芯片傳感模塊為手勢(shì)識(shí)別傳感器模塊,0.96寸OLED為識(shí)別結(jié)果顯示模塊,XY-V17B為語(yǔ)音播報(bào)模塊,設(shè)計(jì)了一種手勢(shì)識(shí)別裝置。利用覆銅板感應(yīng)手勢(shì),感應(yīng)信號(hào)送入FDC2214芯片,單片機(jī)讀取FDC2214采集的信息數(shù)據(jù),對(duì)讀取的數(shù)據(jù)進(jìn)行軟件濾波,濾波算法包含算數(shù)平均濾波、中位值濾波法等。測(cè)試結(jié)果表明:該作品實(shí)現(xiàn)了學(xué)習(xí)、猜拳、劃拳手勢(shì)的準(zhǔn)確判別,并擴(kuò)展了語(yǔ)音播報(bào)結(jié)果和特定手勢(shì)播放特定音樂(lè)等相關(guān)功能。
STM32單片機(jī)源程序如下:
- #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ù) : 無(wú)
- * 返回參數(shù) : 無(wú)
- *******************************************************************************/
- 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 上傳
點(diǎn)擊文件名下載附件
基于FDC2214手勢(shì)識(shí)別,OLED顯示,音樂(lè)播放 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|