Motion Detector which can detect the moving direction.

Dependencies:   C12832 MMA7660 mbed

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

Committer:
Xinliang_Zhao
Date:
Thu Feb 19 10:35:58 2015 +0000
Revision:
2:257b84d739a2
Parent:
1:876f52a697c1
Motion Detector which can specify the moving direction.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 1:876f52a697c1 1 //Uses x & y acceleration to simulate a bubble level
4180_1 1:876f52a697c1 2 //on the application board LCD display
Sissors 0:bd0546063b0a 3 #include "mbed.h"
Sissors 0:bd0546063b0a 4 #include "MMA7660.h"
Xinliang_Zhao 2:257b84d739a2 5 #include "C12832.h"
Xinliang_Zhao 2:257b84d739a2 6
Xinliang_Zhao 2:257b84d739a2 7 C12832 lcd(p5, p7, p6, p8, p11); //On board LCD display
Xinliang_Zhao 2:257b84d739a2 8 MMA7660 MMA(p28, p27); //I2C Accelerometer
Xinliang_Zhao 2:257b84d739a2 9 //Serial pc(USBTX, USBRX);
Xinliang_Zhao 2:257b84d739a2 10 //DigitalOut connectionLed(LED1);//Accel OK LED
Xinliang_Zhao 2:257b84d739a2 11 BusOut myleds(LED1, LED2, LED3, LED4);
Xinliang_Zhao 2:257b84d739a2 12
Xinliang_Zhao 2:257b84d739a2 13 int pow(int x) {
Xinliang_Zhao 2:257b84d739a2 14 int pow = 1;
Xinliang_Zhao 2:257b84d739a2 15 if(x == 0) {
Xinliang_Zhao 2:257b84d739a2 16 return pow;
Xinliang_Zhao 2:257b84d739a2 17 }
Xinliang_Zhao 2:257b84d739a2 18 for(int i = 0; i < x; i++) {
Xinliang_Zhao 2:257b84d739a2 19 pow *= 2;
Xinliang_Zhao 2:257b84d739a2 20 }
Xinliang_Zhao 2:257b84d739a2 21 return pow;
Xinliang_Zhao 2:257b84d739a2 22 }
Sissors 0:bd0546063b0a 23
Xinliang_Zhao 2:257b84d739a2 24 void motion_detect() {
Xinliang_Zhao 2:257b84d739a2 25 if(MMA.y() < -0.5) {
Xinliang_Zhao 2:257b84d739a2 26 lcd.cls();
Xinliang_Zhao 2:257b84d739a2 27 lcd.locate(55,12);
Xinliang_Zhao 2:257b84d739a2 28 lcd.printf("UP");
Xinliang_Zhao 2:257b84d739a2 29 for(int i = 0; i < 4; i++) {
Xinliang_Zhao 2:257b84d739a2 30 myleds = pow(i);
Xinliang_Zhao 2:257b84d739a2 31 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 32 }
Xinliang_Zhao 2:257b84d739a2 33 myleds = 0;
Xinliang_Zhao 2:257b84d739a2 34 }
Xinliang_Zhao 2:257b84d739a2 35
Xinliang_Zhao 2:257b84d739a2 36 if(MMA.y() > 0.5) {
Xinliang_Zhao 2:257b84d739a2 37 lcd.cls();
Xinliang_Zhao 2:257b84d739a2 38 lcd.locate(55,12);
Xinliang_Zhao 2:257b84d739a2 39 lcd.printf("DOWN");
Xinliang_Zhao 2:257b84d739a2 40 for(int i = 3; i >= 0; i--) {
Xinliang_Zhao 2:257b84d739a2 41 myleds = pow(i);
Xinliang_Zhao 2:257b84d739a2 42 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 43 }
Xinliang_Zhao 2:257b84d739a2 44 myleds = 0;
Xinliang_Zhao 2:257b84d739a2 45 }
Xinliang_Zhao 2:257b84d739a2 46
Xinliang_Zhao 2:257b84d739a2 47 if(MMA.x() < -0.5) {
Xinliang_Zhao 2:257b84d739a2 48 lcd.cls();
Xinliang_Zhao 2:257b84d739a2 49 lcd.locate(55,12);
Xinliang_Zhao 2:257b84d739a2 50 lcd.printf("RIGHT");
Xinliang_Zhao 2:257b84d739a2 51 myleds = 6;
Xinliang_Zhao 2:257b84d739a2 52 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 53 myleds = 9;
Xinliang_Zhao 2:257b84d739a2 54 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 55 myleds = 0;
Xinliang_Zhao 2:257b84d739a2 56 }
Xinliang_Zhao 2:257b84d739a2 57
Xinliang_Zhao 2:257b84d739a2 58 if(MMA.x() > 0.5) {
Xinliang_Zhao 2:257b84d739a2 59 lcd.cls();
Xinliang_Zhao 2:257b84d739a2 60 lcd.locate(55,12);
Xinliang_Zhao 2:257b84d739a2 61 lcd.printf("LEFT");
Xinliang_Zhao 2:257b84d739a2 62 myleds = 9;
Xinliang_Zhao 2:257b84d739a2 63 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 64 myleds = 6;
Xinliang_Zhao 2:257b84d739a2 65 wait(0.05);
Xinliang_Zhao 2:257b84d739a2 66 myleds = 0;
Xinliang_Zhao 2:257b84d739a2 67 }
Xinliang_Zhao 2:257b84d739a2 68 }
Xinliang_Zhao 2:257b84d739a2 69
4180_1 1:876f52a697c1 70 int main()
4180_1 1:876f52a697c1 71 {
4180_1 1:876f52a697c1 72 lcd.cls(); //clear LCD screen
Sissors 0:bd0546063b0a 73 if (MMA.testConnection())
Xinliang_Zhao 2:257b84d739a2 74 myleds = 15; //Accelerometer init OK
Sissors 0:bd0546063b0a 75 while(1) {
Xinliang_Zhao 2:257b84d739a2 76 motion_detect();
Sissors 0:bd0546063b0a 77 }
Sissors 0:bd0546063b0a 78 }