Test program for the MMA8451Q library
Dependencies: FRDM_MMA8451Q mbed
Fork of FRDM_MMA8451Q by
main.cpp@8:9914c50f5e9a, 2013-05-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |