Test program for the MMA8451Q library

Dependencies:   FRDM_MMA8451Q mbed

Fork of FRDM_MMA8451Q by mbed official

Committer:
clemente
Date:
Sun Aug 25 21:53:45 2013 +0000
Revision:
10:1c11c7f28fff
Parent:
9:e3265135cf68
changed the name of the pointer to user callback function.

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];
clemente 9:e3265135cf68 19 int16_t raw_data[3];
chris 2:41db78380a6e 20
chris 4:367de1084ea9 21 int main(void) {
clemente 8:9914c50f5e9a 22
clemente 8:9914c50f5e9a 23 rled = 0.0;
clemente 8:9914c50f5e9a 24 gled = 0.0;
clemente 8:9914c50f5e9a 25 bled = 0.0;
clemente 8:9914c50f5e9a 26
clemente 8:9914c50f5e9a 27 ff = md = 0;
clemente 8:9914c50f5e9a 28
clemente 8:9914c50f5e9a 29 pc.baud( 230400);
clemente 8:9914c50f5e9a 30 pc.printf("MMA8451 Accelerometer. [%X]\r\n", acc.getWhoAmI());
chris 4:367de1084ea9 31
clemente 8:9914c50f5e9a 32 //
clemente 8:9914c50f5e9a 33 pc.printf("FreeFall Detection\r\n");
clemente 8:9914c50f5e9a 34 // Configure the accelerometer for the freefall detection and
clemente 8:9914c50f5e9a 35 // set the callback function:
clemente 8:9914c50f5e9a 36 acc.FreeFallDetection( &freefall);
clemente 8:9914c50f5e9a 37
clemente 8:9914c50f5e9a 38 while( 1) {
clemente 8:9914c50f5e9a 39 // please type in a key:
clemente 8:9914c50f5e9a 40 if(pc.readable()) {
clemente 8:9914c50f5e9a 41 switch (pc.getc()) {
clemente 8:9914c50f5e9a 42 case 'f':
clemente 8:9914c50f5e9a 43 // Configure the accelerometer for the freefall detection and
clemente 8:9914c50f5e9a 44 // set the callback function:
clemente 8:9914c50f5e9a 45 pc.printf("FreeFall Detection\r\n");
clemente 8:9914c50f5e9a 46 acc.FreeFallDetection( &freefall);
clemente 8:9914c50f5e9a 47 break;
clemente 8:9914c50f5e9a 48 case 'm':
clemente 8:9914c50f5e9a 49 // Configure the accelerometer for the motion detection and
clemente 8:9914c50f5e9a 50 // set the callback function:
clemente 8:9914c50f5e9a 51 pc.printf("Motion Detection\r\n");
clemente 8:9914c50f5e9a 52 acc.MotionDetection( &motion);
clemente 8:9914c50f5e9a 53 break;
clemente 8:9914c50f5e9a 54 case 'o':
clemente 8:9914c50f5e9a 55 // Configure the accelerometer for the orientation detection and
clemente 8:9914c50f5e9a 56 // set the callback function:
clemente 8:9914c50f5e9a 57 pc.printf("Orientation Detection\r\n");
clemente 8:9914c50f5e9a 58 acc.OrientationDetect( &orientation);
clemente 8:9914c50f5e9a 59 break;
clemente 8:9914c50f5e9a 60 case 'r':
clemente 8:9914c50f5e9a 61 // Configure the accelerometer for the data ready and
clemente 8:9914c50f5e9a 62 // set the callback function:
clemente 8:9914c50f5e9a 63 pc.printf("Data Ready\r\n");
clemente 8:9914c50f5e9a 64 acc.DataReady( &dataready, cODR_1_56HZ);
clemente 8:9914c50f5e9a 65 break;
clemente 9:e3265135cf68 66 case 'w':
clemente 9:e3265135cf68 67 // Read the accelorometer value in raw mode.
clemente 9:e3265135cf68 68 pc.printf("Polling method and data raw\r\n");
clemente 9:e3265135cf68 69 //
clemente 9:e3265135cf68 70 while( 1) {
clemente 9:e3265135cf68 71 if ( pc.readable()) {
clemente 9:e3265135cf68 72 break;
clemente 9:e3265135cf68 73 }
clemente 9:e3265135cf68 74 // Check data availability
clemente 9:e3265135cf68 75 if ( acc.getAccRawAllAxis( &raw_data[0])) {
clemente 9:e3265135cf68 76 pc.printf("X: %X, Y: %X, Z: %X\r\n", raw_data[0], raw_data[1], raw_data[2]);
clemente 9:e3265135cf68 77 wait( 1.0);
clemente 9:e3265135cf68 78 }
clemente 9:e3265135cf68 79 }
clemente 9:e3265135cf68 80 break;
clemente 8:9914c50f5e9a 81
clemente 8:9914c50f5e9a 82 }
clemente 8:9914c50f5e9a 83 }
chris 2:41db78380a6e 84 }
chris 2:41db78380a6e 85 }
clemente 8:9914c50f5e9a 86
clemente 8:9914c50f5e9a 87 // callback function for orientation detection mode
clemente 8:9914c50f5e9a 88 void orientation( void)
clemente 8:9914c50f5e9a 89 {
clemente 8:9914c50f5e9a 90 unsigned char o;
clemente 8:9914c50f5e9a 91
clemente 8:9914c50f5e9a 92 o = acc.GetOrientationState();
clemente 8:9914c50f5e9a 93
clemente 8:9914c50f5e9a 94 bled = 1.0;
clemente 8:9914c50f5e9a 95
clemente 8:9914c50f5e9a 96 od++;
clemente 8:9914c50f5e9a 97
clemente 8:9914c50f5e9a 98 //
clemente 8:9914c50f5e9a 99 if ( o & 0x01)
clemente 8:9914c50f5e9a 100 pc.printf("Front ");
clemente 8:9914c50f5e9a 101 else
clemente 8:9914c50f5e9a 102 pc.printf("Back ");
clemente 8:9914c50f5e9a 103 pc.printf("facing\r\n");
clemente 8:9914c50f5e9a 104
clemente 8:9914c50f5e9a 105 //
clemente 8:9914c50f5e9a 106 o = (o>>1) & 0x03;
clemente 8:9914c50f5e9a 107 switch( o) {
clemente 8:9914c50f5e9a 108 case 0:
clemente 8:9914c50f5e9a 109 pc.printf("Portrait Up ");
clemente 8:9914c50f5e9a 110 break;
clemente 8:9914c50f5e9a 111 case 1:
clemente 8:9914c50f5e9a 112 pc.printf("Portrait Down ");
clemente 8:9914c50f5e9a 113 break;
clemente 8:9914c50f5e9a 114 case 2:
clemente 8:9914c50f5e9a 115 pc.printf("Landscape Right ");
clemente 8:9914c50f5e9a 116 break;
clemente 8:9914c50f5e9a 117 case 3:
clemente 8:9914c50f5e9a 118 pc.printf("Landscape Left ");
clemente 8:9914c50f5e9a 119 break;
clemente 8:9914c50f5e9a 120 }
clemente 8:9914c50f5e9a 121
clemente 8:9914c50f5e9a 122 pc.printf( "\r\nod %d\t ornt: %X\r\n", od, o);
clemente 8:9914c50f5e9a 123 }
clemente 8:9914c50f5e9a 124
clemente 8:9914c50f5e9a 125 // callback function for motion detection mode
clemente 8:9914c50f5e9a 126 void motion( void)
clemente 8:9914c50f5e9a 127 {
clemente 8:9914c50f5e9a 128 rled = 1.0;
clemente 8:9914c50f5e9a 129
clemente 8:9914c50f5e9a 130 md++;
clemente 8:9914c50f5e9a 131 pc.printf( "md %d\r\n", md);
clemente 8:9914c50f5e9a 132 }
clemente 8:9914c50f5e9a 133
clemente 8:9914c50f5e9a 134 // callback function for freefall detection mode
clemente 8:9914c50f5e9a 135 void freefall( void)
clemente 8:9914c50f5e9a 136 {
clemente 8:9914c50f5e9a 137 gled = 1.0;
clemente 8:9914c50f5e9a 138
clemente 8:9914c50f5e9a 139 ff++;
clemente 8:9914c50f5e9a 140 pc.printf( "ff %d\r\n", ff);
clemente 8:9914c50f5e9a 141 }
clemente 8:9914c50f5e9a 142
clemente 9:e3265135cf68 143 // callback function for data reading
clemente 8:9914c50f5e9a 144 void dataready( void)
clemente 8:9914c50f5e9a 145 {
clemente 8:9914c50f5e9a 146 acc.getAccAllAxis( &sensor_data[0]);
clemente 9:e3265135cf68 147 pc.printf("X: %f, Y: %f, Z: %f\r\n", sensor_data[0], sensor_data[1], sensor_data[2]);
clemente 8:9914c50f5e9a 148 }