Snake Game using accelerometer with many fun features.

Dependencies:   C12832 MMA7660 mbed

Fork of app-board-Bubble-Level by jim hamblen

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?

UserRevisionLine numberNew 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 }