Snake Game using accelerometer with many fun features.
Dependencies: C12832 MMA7660 mbed
Fork of app-board-Bubble-Level by
motion_detect.cpp@3:2d625f49afb9, 2015-02-19 (annotated)
- Committer:
- Xinliang_Zhao
- Date:
- Thu Feb 19 10:26:14 2015 +0000
- Revision:
- 3:2d625f49afb9
- Parent:
- 2:dd83ac1aba6c
Snake game using accelerometer with many fun features
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Xinliang_Zhao | 2:dd83ac1aba6c | 1 | //Uses x & y acceleration to simulate a bubble level |
Xinliang_Zhao | 2:dd83ac1aba6c | 2 | //on the application board LCD display |
Xinliang_Zhao | 2:dd83ac1aba6c | 3 | #include "mbed.h" |
Xinliang_Zhao | 2:dd83ac1aba6c | 4 | #include "MMA7660.h" |
Xinliang_Zhao | 2:dd83ac1aba6c | 5 | //#include "C12832_lcd.h" |
Xinliang_Zhao | 2:dd83ac1aba6c | 6 | #include "C12832.h" |
Xinliang_Zhao | 2:dd83ac1aba6c | 7 | #include "motion_detect.h" |
Xinliang_Zhao | 2:dd83ac1aba6c | 8 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 9 | #define LEFT 0 |
Xinliang_Zhao | 2:dd83ac1aba6c | 10 | #define RIGHT 1 |
Xinliang_Zhao | 2:dd83ac1aba6c | 11 | #define UP 2 |
Xinliang_Zhao | 2:dd83ac1aba6c | 12 | #define DOWN 3 |
Xinliang_Zhao | 2:dd83ac1aba6c | 13 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 14 | //static C12832_LCD lcd; //On board LCD display |
Xinliang_Zhao | 2:dd83ac1aba6c | 15 | static C12832 lcd(p5, p7, p6, p8, p11); |
Xinliang_Zhao | 2:dd83ac1aba6c | 16 | MMA7660 MMA(p28, p27); //I2C Accelerometer |
Xinliang_Zhao | 2:dd83ac1aba6c | 17 | //Serial pc(USBTX, USBRX); |
Xinliang_Zhao | 2:dd83ac1aba6c | 18 | //DigitalOut connectionLed(LED1);//Accel OK LED |
Xinliang_Zhao | 2:dd83ac1aba6c | 19 | BusOut myleds(LED1, LED2, LED3, LED4); |
Xinliang_Zhao | 2:dd83ac1aba6c | 20 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 21 | int pow(int x) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 22 | int pow = 1; |
Xinliang_Zhao | 2:dd83ac1aba6c | 23 | if(x == 0) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 24 | return pow; |
Xinliang_Zhao | 2:dd83ac1aba6c | 25 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 26 | for(int i = 0; i < x; i++) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 27 | pow *= 2; |
Xinliang_Zhao | 2:dd83ac1aba6c | 28 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 29 | return pow; |
Xinliang_Zhao | 2:dd83ac1aba6c | 30 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 31 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 32 | void motion_detect(int &direction) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 33 | if(MMA.y() < -0.5) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 34 | if(direction != DOWN) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 35 | direction = UP; |
Xinliang_Zhao | 2:dd83ac1aba6c | 36 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 37 | for(int i = 0; i < 4; i++) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 38 | myleds = pow(i); |
Xinliang_Zhao | 2:dd83ac1aba6c | 39 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 40 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 41 | myleds = 0; |
Xinliang_Zhao | 2:dd83ac1aba6c | 42 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 43 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 44 | if(MMA.y() > 0.5) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 45 | if(direction != UP) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 46 | direction = DOWN; |
Xinliang_Zhao | 2:dd83ac1aba6c | 47 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 48 | for(int i = 3; i >= 0; i--) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 49 | myleds = pow(i); |
Xinliang_Zhao | 2:dd83ac1aba6c | 50 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 51 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 52 | myleds = 0; |
Xinliang_Zhao | 2:dd83ac1aba6c | 53 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 54 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 55 | if(MMA.x() < -0.5) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 56 | if(direction != LEFT) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 57 | direction = RIGHT; |
Xinliang_Zhao | 2:dd83ac1aba6c | 58 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 59 | myleds = 6; |
Xinliang_Zhao | 2:dd83ac1aba6c | 60 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 61 | myleds = 9; |
Xinliang_Zhao | 2:dd83ac1aba6c | 62 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 63 | myleds = 0; |
Xinliang_Zhao | 2:dd83ac1aba6c | 64 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 65 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 66 | if(MMA.x() > 0.5) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 67 | if(direction != RIGHT) { |
Xinliang_Zhao | 2:dd83ac1aba6c | 68 | direction = LEFT; |
Xinliang_Zhao | 2:dd83ac1aba6c | 69 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 70 | myleds = 9; |
Xinliang_Zhao | 2:dd83ac1aba6c | 71 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 72 | myleds = 6; |
Xinliang_Zhao | 2:dd83ac1aba6c | 73 | wait(0.05); |
Xinliang_Zhao | 2:dd83ac1aba6c | 74 | myleds = 0; |
Xinliang_Zhao | 2:dd83ac1aba6c | 75 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 76 | } |
Xinliang_Zhao | 2:dd83ac1aba6c | 77 | |
Xinliang_Zhao | 2:dd83ac1aba6c | 78 | void validity() { |
Xinliang_Zhao | 2:dd83ac1aba6c | 79 | lcd.cls(); //clear LCD screen |
Xinliang_Zhao | 2:dd83ac1aba6c | 80 | if (MMA.testConnection()) |
Xinliang_Zhao | 2:dd83ac1aba6c | 81 | myleds = 15; //Accelerometer init OK |
Xinliang_Zhao | 2:dd83ac1aba6c | 82 | } |