Dependencies:   MMA8451Q mbed

Committer:
Thierro
Date:
Fri Dec 19 10:38:18 2014 +0000
Revision:
0:ef6b25a481a5
Child:
1:adb624063b97
venerd? 19 dicembre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Thierro 0:ef6b25a481a5 1 #include "mbed.h"
Thierro 0:ef6b25a481a5 2 #include "MMA8451Q.h"
Thierro 0:ef6b25a481a5 3 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Thierro 0:ef6b25a481a5 4 PinName const SDA = PTE25;
Thierro 0:ef6b25a481a5 5 PinName const SCL = PTE24;
Thierro 0:ef6b25a481a5 6 #else
Thierro 0:ef6b25a481a5 7 #error TARGET NOT DEFINED
Thierro 0:ef6b25a481a5 8 #endif
Thierro 0:ef6b25a481a5 9 /*
Thierro 0:ef6b25a481a5 10 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Thierro 0:ef6b25a481a5 11 PinName const SDA = PTE25;
Thierro 0:ef6b25a481a5 12 PinName const SCL = PTE24;
Thierro 0:ef6b25a481a5 13 #elif defined (TARGET_KL05Z)
Thierro 0:ef6b25a481a5 14 PinName const SDA = PTB4;
Thierro 0:ef6b25a481a5 15 PinName const SCL = PTB3;
Thierro 0:ef6b25a481a5 16 #elif defined (TARGET_K20D50M)
Thierro 0:ef6b25a481a5 17 PinName const SDA = PTB1;
Thierro 0:ef6b25a481a5 18 PinName const SCL = PTB0;
Thierro 0:ef6b25a481a5 19 #else
Thierro 0:ef6b25a481a5 20 #error TARGET NOT DEFINED
Thierro 0:ef6b25a481a5 21 #endif
Thierro 0:ef6b25a481a5 22 */
Thierro 0:ef6b25a481a5 23
Thierro 0:ef6b25a481a5 24 #define MMA8451_I2C_ADDRESS (0x1d<<1)
Thierro 0:ef6b25a481a5 25 #define CNTRL_REG_1 0x2A
Thierro 0:ef6b25a481a5 26 #define X_acc 0x01
Thierro 0:ef6b25a481a5 27 #define Y_acc 0x03
Thierro 0:ef6b25a481a5 28 #define Z_acc 0x05
Thierro 0:ef6b25a481a5 29 #define STATUS 0x00
Thierro 0:ef6b25a481a5 30
Thierro 0:ef6b25a481a5 31 float conversion(char buf);
Thierro 0:ef6b25a481a5 32
Thierro 0:ef6b25a481a5 33 int main(void)
Thierro 0:ef6b25a481a5 34 {
Thierro 0:ef6b25a481a5 35
Thierro 0:ef6b25a481a5 36 I2C i2c(SDA,SCL);
Thierro 0:ef6b25a481a5 37
Thierro 0:ef6b25a481a5 38 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
Thierro 0:ef6b25a481a5 39
Thierro 0:ef6b25a481a5 40 int address = MMA8451_I2C_ADDRESS;
Thierro 0:ef6b25a481a5 41 float x, y, z;
Thierro 0:ef6b25a481a5 42 char stato=STATUS;
Thierro 0:ef6b25a481a5 43 char data_stato;
Thierro 0:ef6b25a481a5 44 const char X_addr=X_acc;
Thierro 0:ef6b25a481a5 45 const char Y_addr=Y_acc;
Thierro 0:ef6b25a481a5 46 const char Z_addr=Z_acc;
Thierro 0:ef6b25a481a5 47 char z_buffer;
Thierro 0:ef6b25a481a5 48 char y_buffer;
Thierro 0:ef6b25a481a5 49 char x_buffer;
Thierro 0:ef6b25a481a5 50
Thierro 0:ef6b25a481a5 51 char data[2] = {CNTRL_REG_1, 0x00};
Thierro 0:ef6b25a481a5 52 i2c.write(address, data, 2);
Thierro 0:ef6b25a481a5 53
Thierro 0:ef6b25a481a5 54 char data_wr_2[2]={CNTRL_REG_1, 0x3B};
Thierro 0:ef6b25a481a5 55 i2c.write(address,data_wr_2, 2);
Thierro 0:ef6b25a481a5 56 PwmOut rled(LED1);
Thierro 0:ef6b25a481a5 57 PwmOut gled(LED2);
Thierro 0:ef6b25a481a5 58 PwmOut bled(LED3);
Thierro 0:ef6b25a481a5 59
Thierro 0:ef6b25a481a5 60 while (true) {
Thierro 0:ef6b25a481a5 61
Thierro 0:ef6b25a481a5 62 i2c.write(address,&stato,1,true);
Thierro 0:ef6b25a481a5 63 i2c.read(address,&data_stato,1,false);
Thierro 0:ef6b25a481a5 64
Thierro 0:ef6b25a481a5 65 if(data_stato & 8 == 8)
Thierro 0:ef6b25a481a5 66 {
Thierro 0:ef6b25a481a5 67 z = 0;
Thierro 0:ef6b25a481a5 68 x = 0;
Thierro 0:ef6b25a481a5 69 y = 0;
Thierro 0:ef6b25a481a5 70 i2c.write(address,&Z_addr,1,true);
Thierro 0:ef6b25a481a5 71 i2c.read(address,&z_buffer,1,false);
Thierro 0:ef6b25a481a5 72 printf("z=%d\n\r", z_buffer);
Thierro 0:ef6b25a481a5 73
Thierro 0:ef6b25a481a5 74
Thierro 0:ef6b25a481a5 75 i2c.write(address,&X_addr,1,true);
Thierro 0:ef6b25a481a5 76 i2c.read(address,&x_buffer,1,false);
Thierro 0:ef6b25a481a5 77 printf("x=%d\n\r", x_buffer);
Thierro 0:ef6b25a481a5 78
Thierro 0:ef6b25a481a5 79
Thierro 0:ef6b25a481a5 80 i2c.write(address,&Y_addr,1,true);
Thierro 0:ef6b25a481a5 81 i2c.read(address,&y_buffer,1,false);
Thierro 0:ef6b25a481a5 82 printf("y=%d\n\r", y_buffer);
Thierro 0:ef6b25a481a5 83
Thierro 0:ef6b25a481a5 84 printf("\n\r");
Thierro 0:ef6b25a481a5 85 x = conversion(x_buffer);
Thierro 0:ef6b25a481a5 86 printf("X= %f\n\r",x);
Thierro 0:ef6b25a481a5 87 y = conversion(y_buffer);
Thierro 0:ef6b25a481a5 88 printf("Y= %f\n\r",y);
Thierro 0:ef6b25a481a5 89 z = conversion(z_buffer);
Thierro 0:ef6b25a481a5 90 printf("Z= %f\n\r",z);
Thierro 0:ef6b25a481a5 91 printf("\n\r");
Thierro 0:ef6b25a481a5 92 rled = 1.0f - abs(x);
Thierro 0:ef6b25a481a5 93 gled = 1.0f - abs(y);
Thierro 0:ef6b25a481a5 94 bled = 1.0f - abs(z);
Thierro 0:ef6b25a481a5 95 }
Thierro 0:ef6b25a481a5 96
Thierro 0:ef6b25a481a5 97
Thierro 0:ef6b25a481a5 98 }
Thierro 0:ef6b25a481a5 99 }
Thierro 0:ef6b25a481a5 100
Thierro 0:ef6b25a481a5 101
Thierro 0:ef6b25a481a5 102 float conversion(char buf)
Thierro 0:ef6b25a481a5 103 {
Thierro 0:ef6b25a481a5 104 float val;
Thierro 0:ef6b25a481a5 105 if( (buf/128) >= 1)
Thierro 0:ef6b25a481a5 106 {
Thierro 0:ef6b25a481a5 107 buf -= 128;
Thierro 0:ef6b25a481a5 108 val -= 128;
Thierro 0:ef6b25a481a5 109 }
Thierro 0:ef6b25a481a5 110
Thierro 0:ef6b25a481a5 111 if( (buf/64) >= 1)
Thierro 0:ef6b25a481a5 112 {
Thierro 0:ef6b25a481a5 113 buf-= 64;
Thierro 0:ef6b25a481a5 114 val += 64;
Thierro 0:ef6b25a481a5 115 }
Thierro 0:ef6b25a481a5 116 if( (buf/32) >= 1)
Thierro 0:ef6b25a481a5 117 {
Thierro 0:ef6b25a481a5 118 buf -=32;
Thierro 0:ef6b25a481a5 119 val += 32;
Thierro 0:ef6b25a481a5 120 }
Thierro 0:ef6b25a481a5 121 if( (buf/16) >= 1)
Thierro 0:ef6b25a481a5 122 {
Thierro 0:ef6b25a481a5 123 buf -=16;
Thierro 0:ef6b25a481a5 124 val += 16;
Thierro 0:ef6b25a481a5 125 }
Thierro 0:ef6b25a481a5 126 if( (buf/8) >= 1)
Thierro 0:ef6b25a481a5 127 {
Thierro 0:ef6b25a481a5 128 buf -=8;
Thierro 0:ef6b25a481a5 129 val += 8;
Thierro 0:ef6b25a481a5 130 }
Thierro 0:ef6b25a481a5 131 if( (buf/4) >= 1)
Thierro 0:ef6b25a481a5 132 {
Thierro 0:ef6b25a481a5 133 buf -= 4;
Thierro 0:ef6b25a481a5 134 val += 4;
Thierro 0:ef6b25a481a5 135 }
Thierro 0:ef6b25a481a5 136 if( (buf/2) >= 1)
Thierro 0:ef6b25a481a5 137 {
Thierro 0:ef6b25a481a5 138 buf -= 2;
Thierro 0:ef6b25a481a5 139 val += 2;
Thierro 0:ef6b25a481a5 140 }
Thierro 0:ef6b25a481a5 141 if( (buf/1) >= 1)
Thierro 0:ef6b25a481a5 142 {
Thierro 0:ef6b25a481a5 143 val+= 1;
Thierro 0:ef6b25a481a5 144 }
Thierro 0:ef6b25a481a5 145 val = (float) val/64;
Thierro 0:ef6b25a481a5 146 return val;
Thierro 0:ef6b25a481a5 147 }