Test program for the MMA8451Q library

Dependencies:   FRDM_MMA8451Q mbed

Fork of FRDM_MMA8451Q by mbed official

Committer:
clemente
Date:
Tue May 28 20:24:11 2013 +0000
Revision:
8:9914c50f5e9a
Parent:
5:bf5becf7469c
Child:
9:e3265135cf68
Last version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 2:41db78380a6e 1 #include "mbed.h"
chris 2:41db78380a6e 2 #include "MMA8451Q.h"
chris 2:41db78380a6e 3
chris 2:41db78380a6e 4 #define MMA8451_I2C_ADDRESS (0x1d<<1)
clemente 8:9914c50f5e9a 5 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
clemente 8:9914c50f5e9a 6
clemente 8:9914c50f5e9a 7 PwmOut rled(LED_RED);
clemente 8:9914c50f5e9a 8 PwmOut gled(LED_GREEN);
clemente 8:9914c50f5e9a 9 PwmOut bled(LED_BLUE);
clemente 8:9914c50f5e9a 10 Serial pc(USBTX, USBRX);
clemente 8:9914c50f5e9a 11
clemente 8:9914c50f5e9a 12 void motion( void); // callback function for motion detection mode
clemente 8:9914c50f5e9a 13 void freefall( void); // callback function for freefall detection mode
clemente 8:9914c50f5e9a 14 void orientation( void); // callback function for orientation detection mode
clemente 8:9914c50f5e9a 15 void dataready( void);
clemente 8:9914c50f5e9a 16
clemente 8:9914c50f5e9a 17 unsigned int ff, md, od;
clemente 8:9914c50f5e9a 18 float sensor_data[3];
chris 2:41db78380a6e 19
chris 4:367de1084ea9 20 int main(void) {
clemente 8:9914c50f5e9a 21
clemente 8:9914c50f5e9a 22 rled = 0.0;
clemente 8:9914c50f5e9a 23 gled = 0.0;
clemente 8:9914c50f5e9a 24 bled = 0.0;
clemente 8:9914c50f5e9a 25
clemente 8:9914c50f5e9a 26 ff = md = 0;
clemente 8:9914c50f5e9a 27
clemente 8:9914c50f5e9a 28 pc.baud( 230400);
clemente 8:9914c50f5e9a 29 pc.printf("MMA8451 Accelerometer. [%X]\r\n", acc.getWhoAmI());
chris 4:367de1084ea9 30
clemente 8:9914c50f5e9a 31 //
clemente 8:9914c50f5e9a 32 pc.printf("FreeFall Detection\r\n");
clemente 8:9914c50f5e9a 33 // Configure the accelerometer for the freefall detection and
clemente 8:9914c50f5e9a 34 // set the callback function:
clemente 8:9914c50f5e9a 35 acc.FreeFallDetection( &freefall);
clemente 8:9914c50f5e9a 36
clemente 8:9914c50f5e9a 37 while( 1) {
clemente 8:9914c50f5e9a 38 // please type in a key:
clemente 8:9914c50f5e9a 39 if(pc.readable()) {
clemente 8:9914c50f5e9a 40 switch (pc.getc()) {
clemente 8:9914c50f5e9a 41 case 'f':
clemente 8:9914c50f5e9a 42 // Configure the accelerometer for the freefall detection and
clemente 8:9914c50f5e9a 43 // set the callback function:
clemente 8:9914c50f5e9a 44 pc.printf("FreeFall Detection\r\n");
clemente 8:9914c50f5e9a 45 acc.FreeFallDetection( &freefall);
clemente 8:9914c50f5e9a 46 break;
clemente 8:9914c50f5e9a 47 case 'm':
clemente 8:9914c50f5e9a 48 // Configure the accelerometer for the motion detection and
clemente 8:9914c50f5e9a 49 // set the callback function:
clemente 8:9914c50f5e9a 50 pc.printf("Motion Detection\r\n");
clemente 8:9914c50f5e9a 51 acc.MotionDetection( &motion);
clemente 8:9914c50f5e9a 52 break;
clemente 8:9914c50f5e9a 53 case 'o':
clemente 8:9914c50f5e9a 54 // Configure the accelerometer for the orientation detection and
clemente 8:9914c50f5e9a 55 // set the callback function:
clemente 8:9914c50f5e9a 56 pc.printf("Orientation Detection\r\n");
clemente 8:9914c50f5e9a 57 acc.OrientationDetect( &orientation);
clemente 8:9914c50f5e9a 58 break;
clemente 8:9914c50f5e9a 59 case 'r':
clemente 8:9914c50f5e9a 60 // Configure the accelerometer for the data ready and
clemente 8:9914c50f5e9a 61 // set the callback function:
clemente 8:9914c50f5e9a 62 pc.printf("Data Ready\r\n");
clemente 8:9914c50f5e9a 63 acc.DataReady( &dataready, cODR_1_56HZ);
clemente 8:9914c50f5e9a 64 break;
clemente 8:9914c50f5e9a 65
clemente 8:9914c50f5e9a 66 }
clemente 8:9914c50f5e9a 67 }
chris 2:41db78380a6e 68 }
chris 2:41db78380a6e 69 }
clemente 8:9914c50f5e9a 70
clemente 8:9914c50f5e9a 71 // callback function for orientation detection mode
clemente 8:9914c50f5e9a 72 void orientation( void)
clemente 8:9914c50f5e9a 73 {
clemente 8:9914c50f5e9a 74 unsigned char o;
clemente 8:9914c50f5e9a 75
clemente 8:9914c50f5e9a 76 o = acc.GetOrientationState();
clemente 8:9914c50f5e9a 77
clemente 8:9914c50f5e9a 78 bled = 1.0;
clemente 8:9914c50f5e9a 79
clemente 8:9914c50f5e9a 80 od++;
clemente 8:9914c50f5e9a 81
clemente 8:9914c50f5e9a 82 //
clemente 8:9914c50f5e9a 83 if ( o & 0x01)
clemente 8:9914c50f5e9a 84 pc.printf("Front ");
clemente 8:9914c50f5e9a 85 else
clemente 8:9914c50f5e9a 86 pc.printf("Back ");
clemente 8:9914c50f5e9a 87 pc.printf("facing\r\n");
clemente 8:9914c50f5e9a 88
clemente 8:9914c50f5e9a 89 //
clemente 8:9914c50f5e9a 90 o = (o>>1) & 0x03;
clemente 8:9914c50f5e9a 91 switch( o) {
clemente 8:9914c50f5e9a 92 case 0:
clemente 8:9914c50f5e9a 93 pc.printf("Portrait Up ");
clemente 8:9914c50f5e9a 94 break;
clemente 8:9914c50f5e9a 95 case 1:
clemente 8:9914c50f5e9a 96 pc.printf("Portrait Down ");
clemente 8:9914c50f5e9a 97 break;
clemente 8:9914c50f5e9a 98 case 2:
clemente 8:9914c50f5e9a 99 pc.printf("Landscape Right ");
clemente 8:9914c50f5e9a 100 break;
clemente 8:9914c50f5e9a 101 case 3:
clemente 8:9914c50f5e9a 102 pc.printf("Landscape Left ");
clemente 8:9914c50f5e9a 103 break;
clemente 8:9914c50f5e9a 104 }
clemente 8:9914c50f5e9a 105
clemente 8:9914c50f5e9a 106 pc.printf( "\r\nod %d\t ornt: %X\r\n", od, o);
clemente 8:9914c50f5e9a 107 }
clemente 8:9914c50f5e9a 108
clemente 8:9914c50f5e9a 109 // callback function for motion detection mode
clemente 8:9914c50f5e9a 110 void motion( void)
clemente 8:9914c50f5e9a 111 {
clemente 8:9914c50f5e9a 112 rled = 1.0;
clemente 8:9914c50f5e9a 113
clemente 8:9914c50f5e9a 114 md++;
clemente 8:9914c50f5e9a 115 pc.printf( "md %d\r\n", md);
clemente 8:9914c50f5e9a 116 }
clemente 8:9914c50f5e9a 117
clemente 8:9914c50f5e9a 118 // callback function for freefall detection mode
clemente 8:9914c50f5e9a 119 void freefall( void)
clemente 8:9914c50f5e9a 120 {
clemente 8:9914c50f5e9a 121 gled = 1.0;
clemente 8:9914c50f5e9a 122
clemente 8:9914c50f5e9a 123 ff++;
clemente 8:9914c50f5e9a 124 pc.printf( "ff %d\r\n", ff);
clemente 8:9914c50f5e9a 125 }
clemente 8:9914c50f5e9a 126
clemente 8:9914c50f5e9a 127 void dataready( void)
clemente 8:9914c50f5e9a 128 {
clemente 8:9914c50f5e9a 129 acc.getAccAllAxis( &sensor_data[0]);
clemente 8:9914c50f5e9a 130 pc.printf("X %f, Y %f, Z %f\r\n", sensor_data[0], sensor_data[1], sensor_data[2]);
clemente 8:9914c50f5e9a 131 }