找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4455|回复: 4
打印 上一主题 下一主题
收起左侧

基于STM32+FDC2214的手势识别程序,OLED显示,音乐播放

[复制链接]
跳转到指定楼层
楼主
ID:319697 发表于 2019-1-16 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本设计以STM32F103ZET6为主控芯片,TI公司的FDC2214芯片传感模块为手势识别传感器模块,0.96寸OLED为识别结果显示模块,XY-V17B为语音播报模块,设计了一种手势识别装置。利用覆铜板感应手势,感应信号送入FDC2214芯片,单片机读取FDC2214采集的信息数据,对读取的数据进行软件滤波,滤波算法包含算数平均滤波、中位值滤波法等。测试结果表明:该作品实现了学习、猜拳、划拳手势的准确判别,并扩展了语音播报结果和特定手势播放特定音乐等相关功能。

STM32单片机源程序如下:
  1. #include "bsp.h"
  2. #include "stmflash.h"
  3. #include "delay.h"
  4. #include "key.h"
  5. #include "sys.h"
  6. #include "oled.h"
  7. #include "usart.h"         
  8. #include "XYV17B.h"
  9. int ChValue[4] = {0};
  10. const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
  11.        
  12. int xuexi_value[8];//学习值保存
  13. int xuexi_read_value[8];//学习值读取
  14.        
  15. #define FLASH_SAVE_ADDR  0X08070000                                 //设置FLASH 保存地址(必须为偶数)
  16. #define SIZE1 sizeof(xuexi_value)       

  17. /*******************************************************************************
  18. * 函数名        : main
  19. * 描述            : 主函数
  20. * 输入参数  : 无
  21. * 返回参数  : 无
  22. *******************************************************************************/       
  23. int main()
  24. {
  25.         int x1=100,x2=100,y1=30,y2=30,y3=30,y4=30;
  26.         delay_init();
  27.         uart_init(9600);
  28.         IIC_Init();
  29.        
  30.         OLED_Init();                 //初始化oled
  31.         delay_ms(100);
  32.         KEY_Init();                          //初始化KEY
  33.         //InitSingleFDC2214();//初始化单通道
  34.         InitMultiFDC2214();
  35.                
  36.         OLED_Clear();
  37.        
  38.         XYV17B_init();
  39.         //////////////////////////////学习
  40.         if(xuexi==0)
  41.         {
  42.         delay_ms(100);
  43.         if(xuexi==0)
  44.         {
  45.         STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)xuexi_value,SIZE1);
  46.         SC_black_Init();
  47.         STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)xuexi_value,SIZE1);
  48.         while(1)
  49.         {
  50.         OLED_Clear();//清屏
  51.         OLED_ShowString(0,0,"OK!");       
  52.                 while(1)
  53.                 {
  54.                         printf("石头=%d\n",xuexi_value[0]);
  55.                         printf("剪刀=%d\n",xuexi_value[1]);
  56.                         printf("布=%d\n",xuexi_value[2]);
  57.                         printf("1=%d\n",xuexi_value[3]);
  58.                         printf("2=%d\n",xuexi_value[4]);
  59.                         printf("3=%d\n",xuexi_value[5]);
  60.                         printf("4=%d\n",xuexi_value[6]);
  61.                         printf("5=%d\n",xuexi_value[7]);
  62.                         delay_ms(5000);
  63.                 }
  64.         }
  65.         }       
  66. }
  67.         STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)xuexi_read_value,SIZE1);//读取flash的值

  68. ////////////////////////定义范围////////////////////////////////
  69.   x1=(xuexi_read_value[1]-xuexi_read_value[0])/2;
  70.   x2=(xuexi_read_value[0]-xuexi_read_value[2])/2;

  71.   y1=(xuexi_read_value[3]-xuexi_read_value[4])/2;
  72.   y2=(xuexi_read_value[4]-xuexi_read_value[5])/2;
  73.   y3=(xuexi_read_value[5]-xuexi_read_value[6])/2;
  74.   y4=(xuexi_read_value[6]-xuexi_read_value[7])/2;



  75. ////////////////////////读取flash的值////////////////////////////////////////
  76.                         while(0)
  77.                 {
  78.                         printf("石头=%d\n",xuexi_value[0]);
  79.                         printf("剪刀=%d\n",xuexi_value[1]);
  80.                         printf("布=%d\n",xuexi_value[2]);
  81.                         printf("1=%d\n",xuexi_value[3]);
  82.                         printf("2=%d\n",xuexi_value[4]);
  83.                         printf("3=%d\n",xuexi_value[5]);
  84.                         printf("4=%d\n",xuexi_value[6]);
  85.                         printf("5=%d\n",xuexi_value[7]);
  86.                         delay_ms(5000);
  87.                 }
  88.                 qumu(1);//曲目   1-20
  89. //void STOP_music();
  90. /////////////////////主程序//////////////////////////////////////////////////               
  91.         while(1)
  92.         {
  93.         OLED_Clear();       
  94.         //        KEY_value();
  95. //                ChValue[0] = FDC2X14ReadCH(1);
  96. //                ChValue[1] = FDC2X14ReadCH(2);
  97. //                ChValue[2] = FDC2X14ReadCH(3);
  98. //                ChValue[3] = Filter4();
  99.                 OLED_ShowNum(0,6,ChValue[3],10,16);
  100.                   ChValue[3] = FDC2X14ReadCH(4)/1000;
  101.         //        OLED_ShowNum(30,3,ChValue[3],7,16);
  102.                 if(moshiqiehuan==0)//猜拳
  103.                 {
  104.                         //清屏
  105.        
  106.         //if(ChValue[3]>=8700000&&ChValue[3]<=8900000)
  107.                         if(ChValue[3]>=(xuexi_read_value[0]-x2)&&ChValue[3]<=(xuexi_read_value[0]+x1))
  108.                 {
  109.        
  110.      OLED_ShowCHinese(30,3,1);
  111.            OLED_ShowCHinese(50,3,2);//石头
  112.                  printf("石头=%d\n",ChValue[3]);
  113.                 }
  114.                 else
  115.                 if(ChValue[3]>=(xuexi_read_value[1]-x1)&&ChValue[3]<=(xuexi_read_value[1]+500))
  116.                 {
  117.        
  118.                  OLED_ShowCHinese(45,3,3);
  119.                  OLED_ShowCHinese(65,3,4);//剪刀
  120.            printf("剪刀=%d\n",ChValue[3]);
  121.                 }
  122.                 else
  123.                 if(ChValue[3]>=(xuexi_read_value[2]-500)&&ChValue[3]<=(xuexi_read_value[2]+x2))
  124.                 {
  125.                  OLED_ShowCHinese(60,3,5);//布
  126.                  printf("布=%d\n",ChValue[3]);
  127.                 }
  128.                 else
  129.                 {
  130.                          OLED_ShowString(0,0,"Error!");       
  131.                   printf("Error=%d\n",ChValue[3]);       
  132.                 }
  133.         }
  134.                
  135.        
  136.         if(moshiqiehuan==1)//划拳
  137.         {
  138.                 if(ChValue[3]>=(xuexi_read_value[3]-y1)&&ChValue[3]<=(xuexi_read_value[3]+200))
  139.                 {
  140.                 OLED_ShowNum(0,3,1,1,16);
  141.                 printf("1=%d\n",ChValue[3]);
  142.                 }
  143.                 else
  144.                 if(ChValue[3]>=(xuexi_read_value[4]-y2)&&ChValue[3]<(xuexi_read_value[4]+y1))
  145.                 {
  146.                 OLED_ShowNum(15,3,2,1,16);
  147.                 printf("2=%d\n",ChValue[3]);
  148.                 }
  149.                 else
  150.                 if(ChValue[3]>=(xuexi_read_value[5]-y3)&&ChValue[3]<=(xuexi_read_value[5]+y2))
  151.                 {
  152.                 OLED_ShowNum(30,3,3,1,16);
  153.                 printf("3=%d\n",ChValue[3]);
  154.                 }
  155.                 else
  156.                 if(ChValue[3]>=(xuexi_read_value[6]-y4)&&ChValue[3]<=(xuexi_read_value[6]+y3))
  157.                 {
  158.                 OLED_ShowNum(45,3,4,1,16);
  159.                 printf("4=%d\n",ChValue[3]);
  160.                 }
  161.                 else
  162.                 if(ChValue[3]>=(xuexi_read_value[7]-500)&&ChValue[3]<=(xuexi_read_value[7]+y4))
  163.                 {
  164.                 OLED_ShowNum(60,3,5,1,16);
  165.                 printf("5=%d\n",ChValue[3]);
  166.                 }
  167.                 else
  168.                 {
  169.                          OLED_ShowString(0,0,"Error!");       
  170.                 printf("Error=%d\n",ChValue[3]);                       
  171.                 }
  172.         }
  173.                 //delay_ms(10);
  174.         }       
  175.                
  176. }
复制代码

所有资料51hei提供下载:
7.22 - 副本.7z (206.42 KB, 下载次数: 108)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:374694 发表于 2019-3-4 00:00 | 只看该作者
厉害了,来学习学习
回复

使用道具 举报

板凳
ID:475858 发表于 2019-3-5 14:37 | 只看该作者
下载学习一下
回复

使用道具 举报

地板
ID:475858 发表于 2019-3-6 13:16 | 只看该作者
这个手势传感模块应该不便宜吧
回复

使用道具 举报

5#
ID:248814 发表于 2019-6-3 14:57 | 只看该作者
下载了,先学一波
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表