Nicholas Herriot
/
MMA8452_test
A test utility for mma8452
main.cpp@3:6d888ac31d2c, 2013-10-08 (annotated)
- Committer:
- nherriot
- Date:
- Tue Oct 08 15:25:46 2013 +0000
- Revision:
- 3:6d888ac31d2c
- Parent:
- 2:0587772b03b0
- Child:
- 4:489573e65d47
adding device id detection
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
matsu | 0:904e837fccc5 | 1 | #include "mbed.h" |
nherriot | 2:0587772b03b0 | 2 | //#include <bitset> |
nherriot | 2:0587772b03b0 | 3 | #include "MMA8452.h" |
matsu | 0:904e837fccc5 | 4 | |
nherriot | 2:0587772b03b0 | 5 | |
nherriot | 2:0587772b03b0 | 6 | // I2C i2c(p28,p27); |
nherriot | 3:6d888ac31d2c | 7 | Accelerometer_MMA8452 accelerometer(p28, p27, 40000); |
nherriot | 3:6d888ac31d2c | 8 | //Accelerometer_MMA8452 acclerometer(p28, p29); |
nherriot | 2:0587772b03b0 | 9 | |
matsu | 0:904e837fccc5 | 10 | Serial pc(USBTX, USBRX); |
matsu | 0:904e837fccc5 | 11 | DigitalOut led1(LED1); |
matsu | 0:904e837fccc5 | 12 | DigitalOut led2(LED2); |
matsu | 0:904e837fccc5 | 13 | DigitalOut led3(LED3); |
matsu | 0:904e837fccc5 | 14 | |
matsu | 0:904e837fccc5 | 15 | int main() { |
matsu | 0:904e837fccc5 | 16 | led1 = 0; |
matsu | 0:904e837fccc5 | 17 | led2 = 0; |
matsu | 0:904e837fccc5 | 18 | led3 = 0; |
matsu | 0:904e837fccc5 | 19 | char cmd[6]; |
matsu | 0:904e837fccc5 | 20 | char add[1]; |
matsu | 0:904e837fccc5 | 21 | char init[2]; |
nherriot | 3:6d888ac31d2c | 22 | add[0] = OUT_X_MSB; // x-axis register |
nherriot | 3:6d888ac31d2c | 23 | init[0] = CTRL_REG_1; // control register 1 |
nherriot | 2:0587772b03b0 | 24 | init[1] = 0x01; // set to active |
matsu | 0:904e837fccc5 | 25 | int number=0; |
nherriot | 2:0587772b03b0 | 26 | //i2c.frequency(40000); |
matsu | 0:904e837fccc5 | 27 | |
nherriot | 2:0587772b03b0 | 28 | // just playing with address values |
nherriot | 2:0587772b03b0 | 29 | char mcu_address = 0x00; |
nherriot | 2:0587772b03b0 | 30 | pc.printf("\nmcu_address is: 0x%x ", mcu_address); |
nherriot | 2:0587772b03b0 | 31 | mcu_address = MMA8452_ADDRESS; |
nherriot | 2:0587772b03b0 | 32 | pc.printf("\nmcu_address is: 0x%x ", mcu_address); |
nherriot | 3:6d888ac31d2c | 33 | mcu_address = (MMA8452_ADDRESS<< 1); // shifting address by 1 bit as i2c is a 7 bit encoding, and this is 8bit encoded |
nherriot | 2:0587772b03b0 | 34 | pc.printf("\nmcu_address is now : 0x%x ", mcu_address); |
nherriot | 2:0587772b03b0 | 35 | |
matsu | 0:904e837fccc5 | 36 | wait(0.5); |
matsu | 0:904e837fccc5 | 37 | //init |
nherriot | 2:0587772b03b0 | 38 | //set active mode |
nherriot | 3:6d888ac31d2c | 39 | pc.printf("\nWriting to master register\n"); |
nherriot | 2:0587772b03b0 | 40 | // while(i2c.write(mcu_address,init,2)); |
nherriot | 3:6d888ac31d2c | 41 | for (int i=0;i<=400;i++) |
nherriot | 3:6d888ac31d2c | 42 | { |
nherriot | 3:6d888ac31d2c | 43 | if (accelerometer.activate()==0) |
nherriot | 3:6d888ac31d2c | 44 | { |
nherriot | 3:6d888ac31d2c | 45 | led1 = 1; |
nherriot | 3:6d888ac31d2c | 46 | led2 = 1; |
nherriot | 3:6d888ac31d2c | 47 | led3 = 1; |
nherriot | 3:6d888ac31d2c | 48 | pc.printf("\nActivated chip\n"); |
nherriot | 3:6d888ac31d2c | 49 | wait(0.5); |
nherriot | 3:6d888ac31d2c | 50 | /*int x=0;int y=0;int z=0; |
nherriot | 3:6d888ac31d2c | 51 | for(int i=0; i<20;i++) |
nherriot | 3:6d888ac31d2c | 52 | { |
nherriot | 3:6d888ac31d2c | 53 | z = accelerometer.read_z(); |
nherriot | 3:6d888ac31d2c | 54 | x = accelerometer.read_x(); |
nherriot | 3:6d888ac31d2c | 55 | y = accelerometer.read_y(); |
nherriot | 3:6d888ac31d2c | 56 | |
nherriot | 3:6d888ac31d2c | 57 | pc.printf("\nAxis acceleration in x is: %i , y is: %i, z is %z \n", x,y,z); |
nherriot | 3:6d888ac31d2c | 58 | wait(3); |
nherriot | 3:6d888ac31d2c | 59 | } |
nherriot | 3:6d888ac31d2c | 60 | */ |
nherriot | 3:6d888ac31d2c | 61 | } |
nherriot | 3:6d888ac31d2c | 62 | else |
nherriot | 3:6d888ac31d2c | 63 | { |
nherriot | 3:6d888ac31d2c | 64 | pc.printf("Could not activate the chip\n"); |
nherriot | 3:6d888ac31d2c | 65 | } |
nherriot | 3:6d888ac31d2c | 66 | pc.printf("In loop %d, of repeated initialisation.\n",i); i++; |
nherriot | 3:6d888ac31d2c | 67 | } |
matsu | 0:904e837fccc5 | 68 | |
matsu | 0:904e837fccc5 | 69 | //get analog data |
nherriot | 2:0587772b03b0 | 70 | pc.printf("Getting analog data"); |
nherriot | 2:0587772b03b0 | 71 | /* |
nherriot | 2:0587772b03b0 | 72 | while(1) |
nherriot | 2:0587772b03b0 | 73 | { |
matsu | 0:904e837fccc5 | 74 | //send procedure |
matsu | 0:904e837fccc5 | 75 | wait(0.07); |
matsu | 0:904e837fccc5 | 76 | switch(number){ |
matsu | 0:904e837fccc5 | 77 | case 0: |
nherriot | 2:0587772b03b0 | 78 | if(i2c.write(mcu_address,add,1) == 0){ |
matsu | 0:904e837fccc5 | 79 | number++; |
nherriot | 2:0587772b03b0 | 80 | pc.printf("In case 0 loop. The number is: %d \n", number); |
matsu | 0:904e837fccc5 | 81 | led1 = 1; |
matsu | 0:904e837fccc5 | 82 | }else{ |
matsu | 0:904e837fccc5 | 83 | number=0; |
nherriot | 2:0587772b03b0 | 84 | pc.printf("In case 0 loop. The number is reset to: %d \n", number); |
matsu | 0:904e837fccc5 | 85 | led1 = 0; |
matsu | 0:904e837fccc5 | 86 | led2 = 0; |
matsu | 0:904e837fccc5 | 87 | led3 = 1; |
matsu | 0:904e837fccc5 | 88 | } |
matsu | 0:904e837fccc5 | 89 | break; |
matsu | 0:904e837fccc5 | 90 | case 1: |
nherriot | 2:0587772b03b0 | 91 | if(i2c.read(mcu_address,cmd,6) == 0){ |
matsu | 0:904e837fccc5 | 92 | number++; |
nherriot | 2:0587772b03b0 | 93 | pc.printf("In case 1 loop. The number is: %d \n", number); |
matsu | 0:904e837fccc5 | 94 | led2 = 1; |
matsu | 0:904e837fccc5 | 95 | }else{ |
matsu | 0:904e837fccc5 | 96 | number=0; |
nherriot | 2:0587772b03b0 | 97 | pc.printf("In case 1 loop. The number is reset to: %d \n", number); |
matsu | 0:904e837fccc5 | 98 | led1 = 0; |
matsu | 0:904e837fccc5 | 99 | led2 = 0; |
matsu | 0:904e837fccc5 | 100 | led3 = 0; |
matsu | 0:904e837fccc5 | 101 | } |
matsu | 0:904e837fccc5 | 102 | break; |
matsu | 0:904e837fccc5 | 103 | case 2: |
matsu | 1:0c1dd02be97a | 104 | //get analog data |
nherriot | 2:0587772b03b0 | 105 | pc.printf("\r X = %d,Y = %d,Z = %d \n",cmd[1],cmd[3],cmd[5]); |
matsu | 0:904e837fccc5 | 106 | led3 = 1; |
matsu | 0:904e837fccc5 | 107 | wait(0.5); |
matsu | 0:904e837fccc5 | 108 | led1 = 0; |
matsu | 0:904e837fccc5 | 109 | led2 = 0; |
matsu | 0:904e837fccc5 | 110 | led3 = 0; |
matsu | 0:904e837fccc5 | 111 | number=0; |
matsu | 0:904e837fccc5 | 112 | break; |
matsu | 0:904e837fccc5 | 113 | } |
nherriot | 2:0587772b03b0 | 114 | }*/ |
nherriot | 2:0587772b03b0 | 115 | |
matsu | 0:904e837fccc5 | 116 | } |