A test utility for mma8452

Dependencies:   MMA8452 mbed

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?

UserRevisionLine numberNew 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 }