senza wake_up

Dependencies:   MMA8451Q mbed

Committer:
giogal
Date:
Tue Jan 20 08:17:10 2015 +0000
Revision:
1:adb624063b97
Parent:
0:ef6b25a481a5
Child:
2:620019419136
boh

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"
giogal 1:adb624063b97 3
Thierro 0:ef6b25a481a5 4 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
Thierro 0:ef6b25a481a5 5 PinName const SDA = PTE25;
Thierro 0:ef6b25a481a5 6 PinName const SCL = PTE24;
Thierro 0:ef6b25a481a5 7 #else
Thierro 0:ef6b25a481a5 8 #error TARGET NOT DEFINED
Thierro 0:ef6b25a481a5 9 #endif
Thierro 0:ef6b25a481a5 10
Thierro 0:ef6b25a481a5 11 #define MMA8451_I2C_ADDRESS (0x1d<<1)
Thierro 0:ef6b25a481a5 12 #define CNTRL_REG_1 0x2A
Thierro 0:ef6b25a481a5 13 #define X_acc 0x01
Thierro 0:ef6b25a481a5 14 #define Y_acc 0x03
Thierro 0:ef6b25a481a5 15 #define Z_acc 0x05
Thierro 0:ef6b25a481a5 16 #define STATUS 0x00
Thierro 0:ef6b25a481a5 17
giogal 1:adb624063b97 18 //funzione di conversione dell'accelerazione da un numero in CA2 al valore espresso in m/s
giogal 1:adb624063b97 19 //viene richiamata per le accelerazioni su ognuno dei tre assi
Thierro 0:ef6b25a481a5 20 float conversion(char buf);
Thierro 0:ef6b25a481a5 21
Thierro 0:ef6b25a481a5 22 int main(void)
Thierro 0:ef6b25a481a5 23 {
giogal 1:adb624063b97 24 //Classe I2C presente nella libreria mbed
Thierro 0:ef6b25a481a5 25 I2C i2c(SDA,SCL);
giogal 1:adb624063b97 26
giogal 1:adb624063b97 27 //Inizializzazione dell'accelerometro configurando pin e l'indirizzo
Thierro 0:ef6b25a481a5 28 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
giogal 1:adb624063b97 29 int address = MMA8451_I2C_ADDRESS;
Thierro 0:ef6b25a481a5 30
giogal 1:adb624063b97 31 //variabili che ci servono nel programma
Thierro 0:ef6b25a481a5 32 float x, y, z;
Thierro 0:ef6b25a481a5 33 char stato=STATUS;
Thierro 0:ef6b25a481a5 34 char data_stato;
giogal 1:adb624063b97 35
Thierro 0:ef6b25a481a5 36 const char X_addr=X_acc;
Thierro 0:ef6b25a481a5 37 const char Y_addr=Y_acc;
Thierro 0:ef6b25a481a5 38 const char Z_addr=Z_acc;
giogal 1:adb624063b97 39
Thierro 0:ef6b25a481a5 40 char z_buffer;
Thierro 0:ef6b25a481a5 41 char y_buffer;
Thierro 0:ef6b25a481a5 42 char x_buffer;
giogal 1:adb624063b97 43
giogal 1:adb624063b97 44 //inizializziamo il registro di controllo a 0 per poterlo settare
Thierro 0:ef6b25a481a5 45 char data[2] = {CNTRL_REG_1, 0x00};
Thierro 0:ef6b25a481a5 46 i2c.write(address, data, 2);
Thierro 0:ef6b25a481a5 47
giogal 1:adb624063b97 48 //settiamo il registro di controllo
Thierro 0:ef6b25a481a5 49 char data_wr_2[2]={CNTRL_REG_1, 0x3B};
Thierro 0:ef6b25a481a5 50 i2c.write(address,data_wr_2, 2);
giogal 1:adb624063b97 51
giogal 1:adb624063b97 52
Thierro 0:ef6b25a481a5 53 PwmOut rled(LED1);
Thierro 0:ef6b25a481a5 54 PwmOut gled(LED2);
Thierro 0:ef6b25a481a5 55 PwmOut bled(LED3);
Thierro 0:ef6b25a481a5 56
Thierro 0:ef6b25a481a5 57 while (true) {
Thierro 0:ef6b25a481a5 58
giogal 1:adb624063b97 59 //Si legge l'indirizzo di stato nell'accelerometro per vedere se ha
giogal 1:adb624063b97 60 //convertito nuovi valori di accelerazione
Thierro 0:ef6b25a481a5 61 i2c.write(address,&stato,1,true);
Thierro 0:ef6b25a481a5 62 i2c.read(address,&data_stato,1,false);
Thierro 0:ef6b25a481a5 63
giogal 1:adb624063b97 64 //Se sono presenti nuovi valori
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
Thierro 0:ef6b25a481a5 73 i2c.write(address,&X_addr,1,true);
Thierro 0:ef6b25a481a5 74 i2c.read(address,&x_buffer,1,false);
Thierro 0:ef6b25a481a5 75
Thierro 0:ef6b25a481a5 76 i2c.write(address,&Y_addr,1,true);
Thierro 0:ef6b25a481a5 77 i2c.read(address,&y_buffer,1,false);
Thierro 0:ef6b25a481a5 78
giogal 1:adb624063b97 79 //Richiamiamo la funzione di conversione per esprimere i
giogal 1:adb624063b97 80 //valori letti in float
Thierro 0:ef6b25a481a5 81 x = conversion(x_buffer);
Thierro 0:ef6b25a481a5 82 printf("X= %f\n\r",x);
giogal 1:adb624063b97 83
Thierro 0:ef6b25a481a5 84 y = conversion(y_buffer);
Thierro 0:ef6b25a481a5 85 printf("Y= %f\n\r",y);
giogal 1:adb624063b97 86
Thierro 0:ef6b25a481a5 87 z = conversion(z_buffer);
Thierro 0:ef6b25a481a5 88 printf("Z= %f\n\r",z);
giogal 1:adb624063b97 89
Thierro 0:ef6b25a481a5 90 printf("\n\r");
giogal 1:adb624063b97 91
giogal 1:adb624063b97 92 //Regolo l'accensione dei led per verificare la presenza di accelerazioni
giogal 1:adb624063b97 93 rled = 1.0f - abs(x);
Thierro 0:ef6b25a481a5 94 gled = 1.0f - abs(y);
Thierro 0:ef6b25a481a5 95 bled = 1.0f - abs(z);
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
Thierro 0:ef6b25a481a5 103 float conversion(char buf)
Thierro 0:ef6b25a481a5 104 {
giogal 1:adb624063b97 105 float val = 0;
Thierro 0:ef6b25a481a5 106 if( (buf/128) >= 1)
Thierro 0:ef6b25a481a5 107 {
Thierro 0:ef6b25a481a5 108 buf -= 128;
Thierro 0:ef6b25a481a5 109 val -= 128;
Thierro 0:ef6b25a481a5 110 }
Thierro 0:ef6b25a481a5 111
Thierro 0:ef6b25a481a5 112 if( (buf/64) >= 1)
Thierro 0:ef6b25a481a5 113 {
Thierro 0:ef6b25a481a5 114 buf-= 64;
Thierro 0:ef6b25a481a5 115 val += 64;
Thierro 0:ef6b25a481a5 116 }
Thierro 0:ef6b25a481a5 117 if( (buf/32) >= 1)
Thierro 0:ef6b25a481a5 118 {
Thierro 0:ef6b25a481a5 119 buf -=32;
Thierro 0:ef6b25a481a5 120 val += 32;
Thierro 0:ef6b25a481a5 121 }
Thierro 0:ef6b25a481a5 122 if( (buf/16) >= 1)
Thierro 0:ef6b25a481a5 123 {
Thierro 0:ef6b25a481a5 124 buf -=16;
Thierro 0:ef6b25a481a5 125 val += 16;
Thierro 0:ef6b25a481a5 126 }
Thierro 0:ef6b25a481a5 127 if( (buf/8) >= 1)
Thierro 0:ef6b25a481a5 128 {
Thierro 0:ef6b25a481a5 129 buf -=8;
Thierro 0:ef6b25a481a5 130 val += 8;
Thierro 0:ef6b25a481a5 131 }
Thierro 0:ef6b25a481a5 132 if( (buf/4) >= 1)
Thierro 0:ef6b25a481a5 133 {
Thierro 0:ef6b25a481a5 134 buf -= 4;
Thierro 0:ef6b25a481a5 135 val += 4;
Thierro 0:ef6b25a481a5 136 }
Thierro 0:ef6b25a481a5 137 if( (buf/2) >= 1)
Thierro 0:ef6b25a481a5 138 {
Thierro 0:ef6b25a481a5 139 buf -= 2;
Thierro 0:ef6b25a481a5 140 val += 2;
Thierro 0:ef6b25a481a5 141 }
Thierro 0:ef6b25a481a5 142 if( (buf/1) >= 1)
Thierro 0:ef6b25a481a5 143 {
Thierro 0:ef6b25a481a5 144 val+= 1;
Thierro 0:ef6b25a481a5 145 }
Thierro 0:ef6b25a481a5 146 val = (float) val/64;
Thierro 0:ef6b25a481a5 147 return val;
Thierro 0:ef6b25a481a5 148 }