Snake Game using accelerometer with many fun features.
Dependencies: C12832 MMA7660 mbed
Fork of app-board-Bubble-Level by
Diff: motion_detect.cpp
- Revision:
- 2:dd83ac1aba6c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/motion_detect.cpp Thu Feb 19 08:15:47 2015 +0000 @@ -0,0 +1,82 @@ +//Uses x & y acceleration to simulate a bubble level +//on the application board LCD display +#include "mbed.h" +#include "MMA7660.h" +//#include "C12832_lcd.h" +#include "C12832.h" +#include "motion_detect.h" + +#define LEFT 0 +#define RIGHT 1 +#define UP 2 +#define DOWN 3 + +//static C12832_LCD lcd; //On board LCD display +static C12832 lcd(p5, p7, p6, p8, p11); +MMA7660 MMA(p28, p27); //I2C Accelerometer +//Serial pc(USBTX, USBRX); +//DigitalOut connectionLed(LED1);//Accel OK LED +BusOut myleds(LED1, LED2, LED3, LED4); + +int pow(int x) { + int pow = 1; + if(x == 0) { + return pow; + } + for(int i = 0; i < x; i++) { + pow *= 2; + } + return pow; +} + +void motion_detect(int &direction) { + if(MMA.y() < -0.5) { + if(direction != DOWN) { + direction = UP; + } + for(int i = 0; i < 4; i++) { + myleds = pow(i); + wait(0.05); + } + myleds = 0; + } + + if(MMA.y() > 0.5) { + if(direction != UP) { + direction = DOWN; + } + for(int i = 3; i >= 0; i--) { + myleds = pow(i); + wait(0.05); + } + myleds = 0; + } + + if(MMA.x() < -0.5) { + if(direction != LEFT) { + direction = RIGHT; + } + myleds = 6; + wait(0.05); + myleds = 9; + wait(0.05); + myleds = 0; + } + + if(MMA.x() > 0.5) { + if(direction != RIGHT) { + direction = LEFT; + } + myleds = 9; + wait(0.05); + myleds = 6; + wait(0.05); + myleds = 0; + } +} + +void validity() { + lcd.cls(); //clear LCD screen + if (MMA.testConnection()) + myleds = 15; //Accelerometer init OK +}