
senza wake_up
main.cpp@2:620019419136, 2015-01-20 (annotated)
- Committer:
- giogal
- Date:
- Tue Jan 20 17:10:46 2015 +0000
- Revision:
- 2:620019419136
- Parent:
- 1:adb624063b97
x
Who changed what in which revision?
User | Revision | Line number | New 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 |
giogal | 2:620019419136 | 13 | #define CNTRL_REG_2 0x2B |
giogal | 2:620019419136 | 14 | #define CNTRL_REG_3 0x2C |
giogal | 2:620019419136 | 15 | #define CNTRL_REG_4 0x2D |
Thierro | 0:ef6b25a481a5 | 16 | #define X_acc 0x01 |
Thierro | 0:ef6b25a481a5 | 17 | #define Y_acc 0x03 |
Thierro | 0:ef6b25a481a5 | 18 | #define Z_acc 0x05 |
Thierro | 0:ef6b25a481a5 | 19 | #define STATUS 0x00 |
Thierro | 0:ef6b25a481a5 | 20 | |
giogal | 1:adb624063b97 | 21 | //funzione di conversione dell'accelerazione da un numero in CA2 al valore espresso in m/s |
giogal | 1:adb624063b97 | 22 | //viene richiamata per le accelerazioni su ognuno dei tre assi |
Thierro | 0:ef6b25a481a5 | 23 | float conversion(char buf); |
Thierro | 0:ef6b25a481a5 | 24 | |
giogal | 2:620019419136 | 25 | int Inter=0; |
giogal | 2:620019419136 | 26 | void isr(){ |
giogal | 2:620019419136 | 27 | Inter=1; |
giogal | 2:620019419136 | 28 | } |
giogal | 2:620019419136 | 29 | |
Thierro | 0:ef6b25a481a5 | 30 | int main(void) |
Thierro | 0:ef6b25a481a5 | 31 | { |
giogal | 1:adb624063b97 | 32 | //Classe I2C presente nella libreria mbed |
Thierro | 0:ef6b25a481a5 | 33 | I2C i2c(SDA,SCL); |
giogal | 1:adb624063b97 | 34 | |
giogal | 1:adb624063b97 | 35 | //Inizializzazione dell'accelerometro configurando pin e l'indirizzo |
Thierro | 0:ef6b25a481a5 | 36 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
giogal | 1:adb624063b97 | 37 | int address = MMA8451_I2C_ADDRESS; |
Thierro | 0:ef6b25a481a5 | 38 | |
giogal | 1:adb624063b97 | 39 | //variabili che ci servono nel programma |
Thierro | 0:ef6b25a481a5 | 40 | float x, y, z; |
Thierro | 0:ef6b25a481a5 | 41 | char stato=STATUS; |
Thierro | 0:ef6b25a481a5 | 42 | char data_stato; |
giogal | 1:adb624063b97 | 43 | |
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; |
giogal | 1:adb624063b97 | 47 | |
Thierro | 0:ef6b25a481a5 | 48 | char z_buffer; |
Thierro | 0:ef6b25a481a5 | 49 | char y_buffer; |
Thierro | 0:ef6b25a481a5 | 50 | char x_buffer; |
giogal | 2:620019419136 | 51 | InterruptIn trig(PTA15); |
giogal | 2:620019419136 | 52 | |
giogal | 2:620019419136 | 53 | PwmOut rled(LED1); |
giogal | 2:620019419136 | 54 | PwmOut gled(LED2); |
giogal | 2:620019419136 | 55 | PwmOut bled(LED3); |
giogal | 1:adb624063b97 | 56 | |
giogal | 1:adb624063b97 | 57 | //inizializziamo il registro di controllo a 0 per poterlo settare |
Thierro | 0:ef6b25a481a5 | 58 | char data[2] = {CNTRL_REG_1, 0x00}; |
Thierro | 0:ef6b25a481a5 | 59 | i2c.write(address, data, 2); |
Thierro | 0:ef6b25a481a5 | 60 | |
giogal | 2:620019419136 | 61 | char wr_2[2] = {CNTRL_REG_2, 0x04}; |
giogal | 2:620019419136 | 62 | i2c.write(address, wr_2, 2); |
giogal | 2:620019419136 | 63 | |
giogal | 2:620019419136 | 64 | char wr_4[2] = {CNTRL_REG_4, 0x01}; |
giogal | 2:620019419136 | 65 | i2c.write(address, wr_4, 2); |
giogal | 1:adb624063b97 | 66 | |
giogal | 2:620019419136 | 67 | char wr_3[2] = {CNTRL_REG_3, 0x02}; |
giogal | 2:620019419136 | 68 | i2c.write(address, wr_3, 2); |
giogal | 2:620019419136 | 69 | |
giogal | 2:620019419136 | 70 | //settiamo il registro di controllo |
giogal | 2:620019419136 | 71 | char wr_1[2]={CNTRL_REG_1, 0xFB}; |
giogal | 2:620019419136 | 72 | i2c.write(address,wr_1, 2); |
giogal | 1:adb624063b97 | 73 | |
giogal | 2:620019419136 | 74 | |
Thierro | 0:ef6b25a481a5 | 75 | |
Thierro | 0:ef6b25a481a5 | 76 | while (true) { |
Thierro | 0:ef6b25a481a5 | 77 | |
giogal | 1:adb624063b97 | 78 | //Si legge l'indirizzo di stato nell'accelerometro per vedere se ha |
giogal | 1:adb624063b97 | 79 | //convertito nuovi valori di accelerazione |
Thierro | 0:ef6b25a481a5 | 80 | i2c.write(address,&stato,1,true); |
Thierro | 0:ef6b25a481a5 | 81 | i2c.read(address,&data_stato,1,false); |
Thierro | 0:ef6b25a481a5 | 82 | |
giogal | 2:620019419136 | 83 | trig.rise(&isr); |
giogal | 2:620019419136 | 84 | if(Inter) |
Thierro | 0:ef6b25a481a5 | 85 | { |
giogal | 2:620019419136 | 86 | Inter = 0; |
Thierro | 0:ef6b25a481a5 | 87 | z = 0; |
Thierro | 0:ef6b25a481a5 | 88 | x = 0; |
Thierro | 0:ef6b25a481a5 | 89 | y = 0; |
Thierro | 0:ef6b25a481a5 | 90 | i2c.write(address,&Z_addr,1,true); |
Thierro | 0:ef6b25a481a5 | 91 | i2c.read(address,&z_buffer,1,false); |
Thierro | 0:ef6b25a481a5 | 92 | |
Thierro | 0:ef6b25a481a5 | 93 | i2c.write(address,&X_addr,1,true); |
Thierro | 0:ef6b25a481a5 | 94 | i2c.read(address,&x_buffer,1,false); |
Thierro | 0:ef6b25a481a5 | 95 | |
Thierro | 0:ef6b25a481a5 | 96 | i2c.write(address,&Y_addr,1,true); |
Thierro | 0:ef6b25a481a5 | 97 | i2c.read(address,&y_buffer,1,false); |
Thierro | 0:ef6b25a481a5 | 98 | |
giogal | 1:adb624063b97 | 99 | //Richiamiamo la funzione di conversione per esprimere i |
giogal | 1:adb624063b97 | 100 | //valori letti in float |
Thierro | 0:ef6b25a481a5 | 101 | x = conversion(x_buffer); |
Thierro | 0:ef6b25a481a5 | 102 | printf("X= %f\n\r",x); |
giogal | 1:adb624063b97 | 103 | |
Thierro | 0:ef6b25a481a5 | 104 | y = conversion(y_buffer); |
Thierro | 0:ef6b25a481a5 | 105 | printf("Y= %f\n\r",y); |
giogal | 1:adb624063b97 | 106 | |
Thierro | 0:ef6b25a481a5 | 107 | z = conversion(z_buffer); |
Thierro | 0:ef6b25a481a5 | 108 | printf("Z= %f\n\r",z); |
giogal | 1:adb624063b97 | 109 | |
Thierro | 0:ef6b25a481a5 | 110 | printf("\n\r"); |
giogal | 1:adb624063b97 | 111 | |
giogal | 1:adb624063b97 | 112 | //Regolo l'accensione dei led per verificare la presenza di accelerazioni |
giogal | 1:adb624063b97 | 113 | rled = 1.0f - abs(x); |
Thierro | 0:ef6b25a481a5 | 114 | gled = 1.0f - abs(y); |
Thierro | 0:ef6b25a481a5 | 115 | bled = 1.0f - abs(z); |
Thierro | 0:ef6b25a481a5 | 116 | } |
Thierro | 0:ef6b25a481a5 | 117 | |
Thierro | 0:ef6b25a481a5 | 118 | |
Thierro | 0:ef6b25a481a5 | 119 | } |
Thierro | 0:ef6b25a481a5 | 120 | } |
Thierro | 0:ef6b25a481a5 | 121 | |
Thierro | 0:ef6b25a481a5 | 122 | |
Thierro | 0:ef6b25a481a5 | 123 | float conversion(char buf) |
Thierro | 0:ef6b25a481a5 | 124 | { |
giogal | 1:adb624063b97 | 125 | float val = 0; |
Thierro | 0:ef6b25a481a5 | 126 | if( (buf/128) >= 1) |
Thierro | 0:ef6b25a481a5 | 127 | { |
Thierro | 0:ef6b25a481a5 | 128 | buf -= 128; |
Thierro | 0:ef6b25a481a5 | 129 | val -= 128; |
Thierro | 0:ef6b25a481a5 | 130 | } |
Thierro | 0:ef6b25a481a5 | 131 | |
Thierro | 0:ef6b25a481a5 | 132 | if( (buf/64) >= 1) |
Thierro | 0:ef6b25a481a5 | 133 | { |
Thierro | 0:ef6b25a481a5 | 134 | buf-= 64; |
Thierro | 0:ef6b25a481a5 | 135 | val += 64; |
Thierro | 0:ef6b25a481a5 | 136 | } |
Thierro | 0:ef6b25a481a5 | 137 | if( (buf/32) >= 1) |
Thierro | 0:ef6b25a481a5 | 138 | { |
Thierro | 0:ef6b25a481a5 | 139 | buf -=32; |
Thierro | 0:ef6b25a481a5 | 140 | val += 32; |
Thierro | 0:ef6b25a481a5 | 141 | } |
Thierro | 0:ef6b25a481a5 | 142 | if( (buf/16) >= 1) |
Thierro | 0:ef6b25a481a5 | 143 | { |
Thierro | 0:ef6b25a481a5 | 144 | buf -=16; |
Thierro | 0:ef6b25a481a5 | 145 | val += 16; |
Thierro | 0:ef6b25a481a5 | 146 | } |
Thierro | 0:ef6b25a481a5 | 147 | if( (buf/8) >= 1) |
Thierro | 0:ef6b25a481a5 | 148 | { |
Thierro | 0:ef6b25a481a5 | 149 | buf -=8; |
Thierro | 0:ef6b25a481a5 | 150 | val += 8; |
Thierro | 0:ef6b25a481a5 | 151 | } |
Thierro | 0:ef6b25a481a5 | 152 | if( (buf/4) >= 1) |
Thierro | 0:ef6b25a481a5 | 153 | { |
Thierro | 0:ef6b25a481a5 | 154 | buf -= 4; |
Thierro | 0:ef6b25a481a5 | 155 | val += 4; |
Thierro | 0:ef6b25a481a5 | 156 | } |
Thierro | 0:ef6b25a481a5 | 157 | if( (buf/2) >= 1) |
Thierro | 0:ef6b25a481a5 | 158 | { |
Thierro | 0:ef6b25a481a5 | 159 | buf -= 2; |
Thierro | 0:ef6b25a481a5 | 160 | val += 2; |
Thierro | 0:ef6b25a481a5 | 161 | } |
Thierro | 0:ef6b25a481a5 | 162 | if( (buf/1) >= 1) |
Thierro | 0:ef6b25a481a5 | 163 | { |
Thierro | 0:ef6b25a481a5 | 164 | val+= 1; |
Thierro | 0:ef6b25a481a5 | 165 | } |
giogal | 2:620019419136 | 166 | val = (float) val*9.8/64; |
Thierro | 0:ef6b25a481a5 | 167 | return val; |
Thierro | 0:ef6b25a481a5 | 168 | } |