Test program for the MMA8451Q library
Dependencies: FRDM_MMA8451Q mbed
Fork of FRDM_MMA8451Q by
main.cpp@10:1c11c7f28fff, 2013-08-25 (annotated)
- 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?
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]; |
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 | } |