19270浏览
查看: 19270|回复: 30

手势传感器试用+【我也来一个贪吃蛇】

[复制链接]
看了大神们拿Gesture传感器发挥想象实现各种控制,我也来凑凑热闹~~
小小贪吃蛇~~~~~
手势传感器试用+【我也来一个贪吃蛇】图1


元件清单
     Arduino Uno x1
     RGB & Gesture Sensor x1
     I/O Expansion x1
     SS1306 OLED  x1
手势传感器试用+【我也来一个贪吃蛇】图2

连线方式

     RGB&Gesture Sensor
         SDA  -> SDA
         SCL  ->SCL
         GND ->GND
         VCC ->VCC
         INT ->D2

     SS1306 OLED
         MOSI  ->     D9     
         SCK   - >      D10  
         DC     - >      D11
         CS     - >      D12   
         RES    ->     D13

手势传感器试用+【我也来一个贪吃蛇】图3
代码如下:
  1. #include "U8glib.h"
  2. #include <Wire.h>
  3. #include <SparkFun_APDS9960.h>
  4. // Pins
  5. #define APDS9960_INT    2 // Needs to be an interrupt pin
  6. // Constants
  7. // Global Variables
  8. SparkFun_APDS9960 apds = SparkFun_APDS9960();
  9. int isr_flag = 0;
  10. #define RIGHT 0
  11. #define UP    1
  12. #define LEFT  2
  13. #define DOWN  3
  14. /*
  15. SW SPI COM:
  16. SCK = 10, MOSI = 9 , CS = 12, A0 = 11, RES = 13
  17. */
  18. U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 13);
  19. int score = 0;
  20. int level = 1;
  21. int gamespeed = 100;
  22. int i;
  23. //组成单位,4X4像素点的方块。
  24. const uint8_t ele[] PROGMEM = {
  25.   0xf0, //B1111000
  26.   0xb0, //B1011000
  27.   0xd0, //B1101000
  28.   0xf0, //B1111000
  29. };
  30. //蛇
  31. void element(int x, int y) {
  32.   u8g.drawBitmapP(x,y, 1,4, ele);
  33. }
  34. struct FOOD {
  35.   int x;
  36.   int y;
  37.   int yes;  
  38. };
  39. FOOD food = {25, 30, 1};
  40. struct SNAKE {
  41.   int x[200];
  42.   int y[200];
  43.   int node;
  44.   int dir;
  45.   int lefe;
  46. };
  47. SNAKE snake = {{9,5}, {30,30}, 2, RIGHT, 0};
  48. //游戏基本界面
  49. void UI() {
  50.   u8g.drawFrame(0,1, 102,62);   //内边界
  51.   u8g.drawFrame(0,0, 102,64);   //外边界
  52.   u8g.setFont(u8g_font_5x7);    //设置字体
  53.   u8g.drawStr(104,12, "LEVEL"); //等级提示
  54.   u8g.drawStr(104,40, "SCORE"); //分数提示
  55. }
  56. void printScore(int x, int y, int s) {
  57.   u8g.setFont(u8g_font_6x10);
  58.   u8g.setPrintPos(x, y);
  59.   u8g.print(s);
  60. }
  61. void key() {
  62.   if ( apds.isGestureAvailable() ) {
  63.     switch ( apds.readGesture() ) {
  64.       case DIR_UP:
  65.         snake.dir = UP;
  66.         Serial.println("UP");
  67.         break;
  68.       case DIR_DOWN:
  69.         snake.dir = DOWN;
  70.         Serial.println("DOWN");
  71.         break;
  72.       case DIR_LEFT:
  73.         Serial.println("LEFT");
  74.         break;
  75.       case DIR_RIGHT:
  76.         snake.dir = LEFT;
  77.         snake.dir = RIGHT;
  78.         Serial.println("RIGHT");
  79.         break;
  80.       case DIR_NEAR:
  81.         Serial.println("NEAR");
  82.         break;
  83.       case DIR_FAR:
  84.         Serial.println("FAR");
  85.         break;
  86.       default:
  87.         Serial.println("NONE");
  88.     }
  89.   }
  90. }
  91. void snakeGame() {
  92.   switch(snake.dir) {
  93.     case RIGHT:
  94.           snake.x[0] += 4;
  95.           if(snake.x[0]>=101) {
  96.             snake.x[0] = 1;
  97.           } break;
  98.     case UP:
  99.           snake.y[0] -= 4;
  100.           if(snake.y[0]<=1) {
  101.             snake.y[0] = 58;
  102.           } break;
  103.     case LEFT:
  104.           snake.x[0] -= 4;
  105.           if(snake.x[0]<=0) {
  106.             snake.x[0] = 97;
  107.           } break;
  108.     case DOWN:
  109.           snake.y[0] += 4;
  110.           if(snake.y[0]>=62) {
  111.             snake.y[0] = 2;
  112.           } break;
  113.   }  
  114.   
  115.   if((snake.x[0] == food.x) && (snake.y[0] == food.y)) {
  116.     snake.x[0] = food.x;
  117.     snake.y[0] = food.y;
  118.    
  119.     snake.node++;
  120.     food.yes = 1;
  121.     score += 2;
  122.     level = score/10+1;
  123.   }
  124.   for(i=snake.node-1;i>0;i--) {
  125.     snake.x[i] = snake.x[i-1];
  126.     snake.y[i] = snake.y[i-1];
  127.   }
  128. }
  129. void setup() {
  130.   // Initialize Serial port
  131.   Serial.begin(9600);
  132.   Serial.println();
  133.   //Serial.println(F("--------------------------------"));
  134.   //Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  135.   //Serial.println(F("--------------------------------"));
  136.   
  137.   // Initialize interrupt service routine
  138.   attachInterrupt(0, interruptRoutine, FALLING);
  139. // Initialize APDS-9960 (configure I2C and initial values)
  140.   if ( apds.init() ) {
  141.     Serial.println(F("APDS-9960 initialization complete"));
  142.   } else {
  143.     Serial.println(F("Something went wrong during APDS-9960 init!"));
  144.   }
  145.   
  146.   // Start running the APDS-9960 gesture sensor engine
  147.   if ( apds.enableGestureSensor(true) ) {
  148.     Serial.println(F("Gesture sensor is now running"));
  149.   } else {
  150.     Serial.println(F("Something went wrong during gesture sensor init!"));
  151.   }
  152. }
  153. void interruptRoutine() {
  154.   isr_flag = 1;
  155. }
  156. void loop() {
  157.   if( isr_flag == 1 ) {
  158.       key();
  159.       if(digitalRead(APDS9960_INT) == 0){
  160.       apds.init();
  161.       apds.enableGestureSensor(true);
  162.     }
  163.     isr_flag = 0;
  164.   }
  165.   u8g.firstPage();
  166.   do {
  167.     UI();
  168.     for(i=0; i<snake.node;i++) {
  169.       element(snake.x[i], snake.y[i]);
  170.     }
  171.     element(food.x, food.y);
  172.    
  173.     printScore(103, 62, food.x);
  174.     printScore(116, 62, food.y);
  175.    
  176.     printScore(109, 22, level);
  177.     printScore(109, 50, score);
  178.   }while(u8g.nextPage());
  179.   key();
  180.   snakeGame();  
  181.   delay(gamespeed);
  182. }
复制代码
用到的库:下载附件u8glib_arduino_v1.17.zip




本帖被以下淘专辑推荐:

  • · 7|主题: 1, 订阅: 0

rui983003440  学徒

发表于 2017-1-9 15:35:14

凌风清羽 发表于 2017-1-8 23:55
有问题请留言,尽量回啊~~

大神 ,   u8glib.h  库文件可以加点注释给我看看么   本人 菜鸟一枚 想理解一下 那些代码。。麻烦大神 指教一二   !
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2017-1-8 23:55:19

rui983003440 发表于 2017-1-3 16:00
楼主,我是一名在校学生,看了你的创作 非常感兴趣  ,可否在空余时间 回复一下  有一些不清楚的地方想请教 ...

有问题请留言,尽量回啊~~
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2017-1-8 23:56:00

深海的 发表于 2016-12-28 20:51
求助,求助:完全按照楼主的步骤走的啊,可是加了APDS 9960手势传感器后,开局蛇就不动,僵死在屏上;不加 ...

当初这边帖子写的比较仓促,改天我再review一下
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 10:06:01

food目前位置还不能移动哈,后续会改进~~~~~
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-8-26 12:01:57

玩起来好累
回复

使用道具 举报

大连林海  初级技神

发表于 2016-8-26 13:00:49

看着都累啊
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 14:58:01


反应不灵敏啊,这个我也没办法a ~~~~~
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 14:58:14


反应不灵敏啊,这个我也没办法a ~~~~~
回复

使用道具 举报

luna  初级技神

发表于 2016-8-26 15:32:39

哇塞,终于看到视频了,视屏外的我能感受到楼主的手迷之焦虑
回复

使用道具 举报

swanglei  中级技神

发表于 2016-8-26 16:04:45

啊哈哈,这个创意不错的!!!
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 16:43:28

luna 发表于 2016-8-26 15:32
哇塞,终于看到视频了,视屏外的我能感受到楼主的手迷之焦虑

感觉手不听使唤了,玩久了估计能找到feel,哈哈~~
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 16:43:49

swanglei 发表于 2016-8-26 16:04
啊哈哈,这个创意不错的!!!

抄袭来的创意~~嘿嘿~~
回复

使用道具 举报

luna  初级技神

发表于 2016-8-26 16:50:04

swanglei 发表于 2016-8-26 16:04
啊哈哈,这个创意不错的!!!

lin用点阵屏做了个贪吃蛇~
回复

使用道具 举报

swanglei  中级技神

发表于 2016-8-26 17:08:11

凌风清羽 发表于 2016-8-26 16:43
抄袭来的创意~~嘿嘿~~

能做出来也很吊~
回复

使用道具 举报

凌风清羽  中级技匠
 楼主|

发表于 2016-8-26 17:16:42

回复

使用道具 举报

hnyzcj  版主

发表于 2016-8-26 17:56:35

凌风清羽 发表于 2016-8-26 17:16
https://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=15976&highlight=%E8%B4%AA%E5%90%8 ...

不错不错
回复

使用道具 举报

svw  初级技匠

发表于 2016-8-26 21:42:20

第一个,赞!
不妨做2层楼,1,2楼间手乱动。
楼顶是led屏。
回复

使用道具 举报

lin  中级技师

发表于 2016-8-27 19:27:40

看着手累。。。所以我就不录视频了,玩起来也是一样的
不过,你做的界面好高级啊
回复

使用道具 举报

dbc0301  高级技匠

发表于 2016-8-28 11:41:17

看着都累。。。
回复

使用道具 举报

dbc0301  高级技匠

发表于 2016-8-28 11:47:45

做出来也是很厉害的了
回复

使用道具 举报

iooops  中级技匠

发表于 2016-8-31 19:16:50

我靠 大神
回复

使用道具 举报

iooops  中级技匠

发表于 2016-8-31 19:17:31

我很好奇这个显示模块叫啥
回复

使用道具 举报

heinau  高级技匠

发表于 2016-9-1 13:55:45

哈哈哈哈这个操作很有难度,需要提前预判
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail