Questa è la versione deifinitiva del codice del Lab2_I2C e del lab3_SPI (nell'altra c'era un commento sbagliato è do dovuto ripubblicarla)

Dependencies:   MMA8451Q mbed

Fork of Codice_Lab2_I2C_Lab3_SPI by SDI 2014/2015

Committer:
capopolito
Date:
Thu Jan 15 21:45:52 2015 +0000
Revision:
1:944348c50dd6
Parent:
0:4317f4b1a4b3
Child:
2:53521a18c3de
Lab 2 modificata da Marco e settate le impostazioni sul Free fall / motion detection sulla base dell' AN4070

Who changed what in which revision?

UserRevisionLine numberNew contents of line
serenabpolito 0:4317f4b1a4b3 1 #include "mbed.h"
serenabpolito 0:4317f4b1a4b3 2 #include "MMA8451Q.h"
serenabpolito 0:4317f4b1a4b3 3 #include "I2C.h"
serenabpolito 0:4317f4b1a4b3 4
serenabpolito 0:4317f4b1a4b3 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
serenabpolito 0:4317f4b1a4b3 6 PinName const SDA = PTE25;
serenabpolito 0:4317f4b1a4b3 7 PinName const SCL = PTE24;
serenabpolito 0:4317f4b1a4b3 8 #elif defined (TARGET_KL05Z)
serenabpolito 0:4317f4b1a4b3 9 PinName const SDA = PTB4;
serenabpolito 0:4317f4b1a4b3 10 PinName const SCL = PTB3;
serenabpolito 0:4317f4b1a4b3 11 #elif defined (TARGET_K20D50M)
serenabpolito 0:4317f4b1a4b3 12 PinName const SDA = PTB1;
serenabpolito 0:4317f4b1a4b3 13 PinName const SCL = PTB0;
serenabpolito 0:4317f4b1a4b3 14 #else
serenabpolito 0:4317f4b1a4b3 15 #error TARGET NOT DEFINED
serenabpolito 0:4317f4b1a4b3 16 #endif
serenabpolito 0:4317f4b1a4b3 17
serenabpolito 0:4317f4b1a4b3 18 #define MMA8451_I2C_ADDRESS (0x1d<<1)
serenabpolito 0:4317f4b1a4b3 19
serenabpolito 0:4317f4b1a4b3 20
serenabpolito 0:4317f4b1a4b3 21 //instanzia e inizializza oggettto i2c della clase I2C
serenabpolito 0:4317f4b1a4b3 22 I2C i2c(SDA,SCL); // SDA I2C data line pin
serenabpolito 0:4317f4b1a4b3 23 // SCL I2C clock line pin
serenabpolito 0:4317f4b1a4b3 24
serenabpolito 0:4317f4b1a4b3 25
serenabpolito 0:4317f4b1a4b3 26 char address_wr = 0x3A ; //byte per eseguire lettura: address_device + bit_wr(W=0)
serenabpolito 0:4317f4b1a4b3 27 char address_rd = 0x3B ; //byte per eseguire scrittura: address_device + bit_rd(R=1)
serenabpolito 0:4317f4b1a4b3 28 char CTRL_REG_1 = 0x2A ; // register address del CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 29 char CTRL_REG_2 = 0x2B ; // register address del CTRL_REG_2
serenabpolito 0:4317f4b1a4b3 30 char CTRL_REG_3 = 0x2C ; // register address del CTRL_REG_3
serenabpolito 0:4317f4b1a4b3 31 char CTRL_REG_4 = 0x2D ; // register address del CTRL_REG_4
serenabpolito 0:4317f4b1a4b3 32 char CTRL_REG_5 = 0x2E ; // register address del CTRL_REG_5
serenabpolito 0:4317f4b1a4b3 33 char data = 0xFA ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 34 char OUT_X_MSB = 0x01 ; // parte più significativa del registro contenete l'accelerazione sull'asse x
serenabpolito 0:4317f4b1a4b3 35 char OUT_Y_MSB = 0x03 ; // parte più significativa del registro contenete l'accelerazione sull'asse y
serenabpolito 0:4317f4b1a4b3 36 char OUT_Z_MSB = 0x05 ; // parte più significativa del registro contenete l'accelerazione sull'asse z
serenabpolito 0:4317f4b1a4b3 37 char XYZ_DATA_CFG = 0x0E;// register address del XYZ_DATA_CFG
serenabpolito 0:4317f4b1a4b3 38 //ASLP_RATE0 = ASLP_RATE1 = 1 \\ per settare modalità campionamento in sleep a f=1.56Hz
serenabpolito 0:4317f4b1a4b3 39 //DR2=DR1=DR0 =1 \\ per settare campionamento in wake a f=1.56Hz
serenabpolito 0:4317f4b1a4b3 40 //LNOISE=0 //non attiva ridzuione del rumore (tanto la frequenza di campionamento è bassa)
serenabpolito 0:4317f4b1a4b3 41 //FREAD=1 // attiva modalità fast read, per campionare con 8bit ed avere risoluzione di 8 bit
serenabpolito 0:4317f4b1a4b3 42 //ACTIVE=0 // setta l'avccelerometro in standby per settare anche altri registri
serenabpolito 0:4317f4b1a4b3 43
capopolito 1:944348c50dd6 44 char FF_MT_CFG = 0x15; //registera addres del FF_MT_CFG (Frefall/Motionn Configuration register (Read/Write)
capopolito 1:944348c50dd6 45 char INT_SOURCE = 0x0C;// register adderess del INT_SOURCE ( System Interrupt Status Register)
capopolito 1:944348c50dd6 46 // if SRC_FF_MT=1 indicates that the frefall/motion function interrupt is active.
capopolito 1:944348c50dd6 47 // This bit is asserted whenever "EA" bit i the FF_MT_SRC register is asserted adn the FF_MT interrupt has
capopolito 1:944348c50dd6 48 // been enabled
capopolito 1:944348c50dd6 49 char FF_MT_SRC = 0x16; // register address del FF_MT_SRC (Frefall/Motion Source Register
serenabpolito 0:4317f4b1a4b3 50
serenabpolito 0:4317f4b1a4b3 51
serenabpolito 0:4317f4b1a4b3 52 int main(void)
serenabpolito 0:4317f4b1a4b3 53 {
capopolito 1:944348c50dd6 54 printf("inizio \n");
serenabpolito 0:4317f4b1a4b3 55 //impostazione dei registri con scrittura Single Byte Write
serenabpolito 0:4317f4b1a4b3 56
serenabpolito 0:4317f4b1a4b3 57 // setta impostazioni su CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 58 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 59 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 60 i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 61 i2c.write(data); // scrivi il "data" già inizializzato con le impostazioni del CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 62 i2c.stop();
serenabpolito 0:4317f4b1a4b3 63
serenabpolito 0:4317f4b1a4b3 64 // setta impostazioni su CTRL_REG_2
serenabpolito 0:4317f4b1a4b3 65 data=0x04; //imposta data con le impostazioni del CTRL_REG_2
serenabpolito 0:4317f4b1a4b3 66 //ST=0 disabilita il self-test
serenabpolito 0:4317f4b1a4b3 67 //RST=0 disabilita modalità reset
serenabpolito 0:4317f4b1a4b3 68 //bit 5 don't care
serenabpolito 0:4317f4b1a4b3 69 //SMODS0=SMODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in sleep
serenabpolito 0:4317f4b1a4b3 70 //SLPE=1 abilita l'autosleep
serenabpolito 0:4317f4b1a4b3 71 //MODS0=MODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in active
serenabpolito 0:4317f4b1a4b3 72 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 73 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 74 i2c.write(CTRL_REG_2); // scrivi l'indirizzo del CTRL_REG_2
serenabpolito 0:4317f4b1a4b3 75 i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_2
serenabpolito 0:4317f4b1a4b3 76 i2c.stop();
serenabpolito 0:4317f4b1a4b3 77
serenabpolito 0:4317f4b1a4b3 78 // setta impostazioni su CTRL_REG_3
capopolito 1:944348c50dd6 79 data=0x08; //imposta data con le impostazioni del CTRL_REG_3 attineti alle gestioni dell'interupt in modalità sleep
serenabpolito 0:4317f4b1a4b3 80 // vedi data-sheet
capopolito 1:944348c50dd6 81 //Bit 7-> FIFO GATE = 0
capopolito 1:944348c50dd6 82 //Bit 6-> WAKE_TRANS = 0
capopolito 1:944348c50dd6 83 //Bit 5-> WAKE_LNDRPT = 0
capopolito 1:944348c50dd6 84 //Bit 4-> WAKE_PULSE = 0
capopolito 1:944348c50dd6 85 //Bit 3-> WAKE_FF_MT = 1 Frefall/Motion function interrupt can wake up !
capopolito 1:944348c50dd6 86 //Bit 2-> don't care
capopolito 1:944348c50dd6 87 //Bit 1-> IPOL = 0
capopolito 1:944348c50dd6 88 //Bit 0-> PP_OD = 0
serenabpolito 0:4317f4b1a4b3 89 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 90 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 91 i2c.write(CTRL_REG_3); // scrivi l'indirizzo del CTRL_REG_3
serenabpolito 0:4317f4b1a4b3 92 i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_3
serenabpolito 0:4317f4b1a4b3 93 i2c.stop();
serenabpolito 0:4317f4b1a4b3 94
serenabpolito 0:4317f4b1a4b3 95 // setta impostazioni su CTRL_REG_4
capopolito 1:944348c50dd6 96 data=0x04; //imposta data con le impostazioni del CTRL_REG_4 attineti alle gestioni dell'interupt
capopolito 1:944348c50dd6 97 // vedi data-sheet
serenabpolito 0:4317f4b1a4b3 98 // vedi data-sheet
capopolito 1:944348c50dd6 99 //Bit 7-> IN_EN_ASLP = 0 ; se = 1 Auto-SLEEP/WAKE interrupt enabled
capopolito 1:944348c50dd6 100 //Bit 6-> INT_EN_FIFO = 0
capopolito 1:944348c50dd6 101 //Bit 5-> INT_EN_TRANS = 0
capopolito 1:944348c50dd6 102 //Bit 4-> INT_EN_LNDPRT = 0
capopolito 1:944348c50dd6 103 //Bit 3-> INT_EN_PULSE = 0
capopolito 1:944348c50dd6 104 //Bit 2-> INT_EN_FF_MT = 1 Freefall/Motion interrupt enabled
capopolito 1:944348c50dd6 105 //Bit 1-> don't care = 0
capopolito 1:944348c50dd6 106 //Bit 0-> INT_EN_DRDY = 0
serenabpolito 0:4317f4b1a4b3 107 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 108 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 109 i2c.write(CTRL_REG_4); // scrivi l'indirizzo del CTRL_REG_4
serenabpolito 0:4317f4b1a4b3 110 i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_4
serenabpolito 0:4317f4b1a4b3 111 i2c.stop();
serenabpolito 0:4317f4b1a4b3 112
capopolito 1:944348c50dd6 113 // setta impostazioni su CTRL_REG_5 (NON UTILIZZATO!)
capopolito 1:944348c50dd6 114 data=0x00; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt nei pin
serenabpolito 0:4317f4b1a4b3 115 // vedi data-sheet
serenabpolito 0:4317f4b1a4b3 116 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 117 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 118 i2c.write(CTRL_REG_5); // scrivi l'indirizzo del CTRL_REG_5
serenabpolito 0:4317f4b1a4b3 119 i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_5
serenabpolito 0:4317f4b1a4b3 120 i2c.stop();
capopolito 1:944348c50dd6 121
serenabpolito 0:4317f4b1a4b3 122 // setta impostazioni su XYZ_DATA_CFG
serenabpolito 0:4317f4b1a4b3 123 data=0x00; //imposta data con le impostazioni del XYZ_DATA_CFG attineti alla dinamica che si vuole acquisire (+-2g)
serenabpolito 0:4317f4b1a4b3 124 // FS1=FS0=0 imposta la dinamica +-2g
serenabpolito 0:4317f4b1a4b3 125 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 126 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 127 i2c.write(XYZ_DATA_CFG); // scrivi l'indirizzo del XYZ_DATA_CFG
serenabpolito 0:4317f4b1a4b3 128 i2c.write(data); // scrivi il "data" contenete le impostazioni del XYZ_DATA_CFG
serenabpolito 0:4317f4b1a4b3 129 i2c.stop();
capopolito 1:944348c50dd6 130
capopolito 1:944348c50dd6 131 // setta impostazioni su FF_MT_CFG (Frefall/Motion Configuration Register (Read/Write)
capopolito 1:944348c50dd6 132 data=0xF8; //imposta data con le impostazioni del FF_MT_SRC attineti quando vogliamo svegliare il dispositivo dal wake
capopolito 1:944348c50dd6 133 //Bit 7-> ELE = 1 ;event flag latch enabled in FF_MT_SRC
capopolito 1:944348c50dd6 134 //Bit 6-> OAE = 1 ;Motion Flag (OR combination)
capopolito 1:944348c50dd6 135 //Bit 5-> ZEFE = 1 ;se = 0 asse Z event dection disabled ; se = 1 asse X raise event flag on measured acceleration value beyond present threshold
capopolito 1:944348c50dd6 136 //Bit 4-> YEFE = 1 ;se = 0 asse Y event dection disabled ; se = 1 asse Y raise event flag on measured acceleration value beyond present threshold
capopolito 1:944348c50dd6 137 //Bit 3-> XEFE = 1 ;se = 0 asse X event dection disabled ; se = 1 asse X raise event flag on measured acceleration value beyond present threshold
capopolito 1:944348c50dd6 138 //Bit 2-> = 0 don't care
capopolito 1:944348c50dd6 139 //Bit 1-> = 0 don't care
capopolito 1:944348c50dd6 140 //Bit 0-> = 0 don't care
capopolito 1:944348c50dd6 141 i2c.start(); // dai lo start
capopolito 1:944348c50dd6 142 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 143 i2c.write(FF_MT_CFG); // scrivi l'indirizzo del FF_MT_CFG
capopolito 1:944348c50dd6 144 i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_CFG
capopolito 1:944348c50dd6 145 i2c.stop();
capopolito 1:944348c50dd6 146
serenabpolito 0:4317f4b1a4b3 147
serenabpolito 0:4317f4b1a4b3 148 //attiva il dispositivo (esce da standby)
serenabpolito 0:4317f4b1a4b3 149 // setta impostazioni su CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 150 data=0xFB ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati)
serenabpolito 0:4317f4b1a4b3 151 i2c.start(); // dai lo start
serenabpolito 0:4317f4b1a4b3 152 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 153 i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 154 i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1
serenabpolito 0:4317f4b1a4b3 155 i2c.stop();
serenabpolito 0:4317f4b1a4b3 156
serenabpolito 0:4317f4b1a4b3 157 //lettura degli assi con lettura Multiple Byte Read
serenabpolito 0:4317f4b1a4b3 158 //float x_axis, y_axis, z_axis;
serenabpolito 0:4317f4b1a4b3 159 //i2c.start();
serenabpolito 0:4317f4b1a4b3 160 //i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 161 //i2c.write(OUT_X_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X
serenabpolito 0:4317f4b1a4b3 162 //i2c.start();
serenabpolito 0:4317f4b1a4b3 163 //i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
serenabpolito 0:4317f4b1a4b3 164 //x_axis=i2c.write(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su x_axis
serenabpolito 0:4317f4b1a4b3 165 //y_axis=i2c.write(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su y_axis
serenabpolito 0:4317f4b1a4b3 166 //z_axis=i2c.write(0); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su z_axis
serenabpolito 0:4317f4b1a4b3 167 //i2c.stop();
serenabpolito 0:4317f4b1a4b3 168
serenabpolito 0:4317f4b1a4b3 169 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
serenabpolito 0:4317f4b1a4b3 170 PwmOut rled(LED1);
serenabpolito 0:4317f4b1a4b3 171 PwmOut gled(LED2);
capopolito 1:944348c50dd6 172 PwmOut bled(LED3);
capopolito 1:944348c50dd6 173
capopolito 1:944348c50dd6 174
serenabpolito 0:4317f4b1a4b3 175 printf("MMA8451 ID: %d\n", acc.getWhoAmI());
serenabpolito 0:4317f4b1a4b3 176
capopolito 1:944348c50dd6 177
capopolito 1:944348c50dd6 178 char stato_FF_MT_SRC = 0x00 ;
capopolito 1:944348c50dd6 179 char stato_INT_SOURCE = 0x00 ;
serenabpolito 0:4317f4b1a4b3 180 float x_axis, y_axis, z_axis;
serenabpolito 0:4317f4b1a4b3 181 while (true) {
capopolito 1:944348c50dd6 182 printf("sono dentro il while \n");
capopolito 1:944348c50dd6 183 //lettura del registro di stato FF_MT_SRC (read only)
capopolito 1:944348c50dd6 184 //Bit 7-> EA = 1 one or more event flag has been asserted
capopolito 1:944348c50dd6 185 //Bit 6-> don't care
capopolito 1:944348c50dd6 186 //Bit 5-> ZHE
capopolito 1:944348c50dd6 187 //Bit 4-> ZHP
capopolito 1:944348c50dd6 188 //Bit 3-> YHE
capopolito 1:944348c50dd6 189 //Bit 2-> YHP
capopolito 1:944348c50dd6 190 //Bit 1-> XHE
capopolito 1:944348c50dd6 191 //Bit 0-> XHP
capopolito 1:944348c50dd6 192
capopolito 1:944348c50dd6 193 //lettura del registro di stato INT_SOURCE (read only)
capopolito 1:944348c50dd6 194 //Bit 7-> SRC_ASLP = 1 one or more event flag has been asserted
capopolito 1:944348c50dd6 195 //Bit 6-> SRC_FIFO
capopolito 1:944348c50dd6 196 //Bit 5-> SRC_TRANS
capopolito 1:944348c50dd6 197 //Bit 4-> SRC_LNDPRT
capopolito 1:944348c50dd6 198 //Bit 3-> SRC_PULSE
capopolito 1:944348c50dd6 199 //Bit 2-> SRC_FF_MT
capopolito 1:944348c50dd6 200 //Bit 1-> DONT'CARE
capopolito 1:944348c50dd6 201 //Bit 0-> SRC_DRDY
capopolito 1:944348c50dd6 202
capopolito 1:944348c50dd6 203 //lettura single byte read
capopolito 1:944348c50dd6 204 i2c.start();
capopolito 1:944348c50dd6 205 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 206 i2c.write(INT_SOURCE); // scrivi l'indirizzo del registro
capopolito 1:944348c50dd6 207 i2c.start();
capopolito 1:944348c50dd6 208 i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 209 stato_INT_SOURCE=i2c.read(0);
capopolito 1:944348c50dd6 210 i2c.stop();
capopolito 1:944348c50dd6 211 printf("stato_INT_SOURCE: %1.2d \n", stato_INT_SOURCE);
capopolito 1:944348c50dd6 212 //lettura single byte read
capopolito 1:944348c50dd6 213 i2c.start();
capopolito 1:944348c50dd6 214 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 215 i2c.write(FF_MT_SRC); // scrivi l'indirizzo del registro
capopolito 1:944348c50dd6 216 i2c.start();
capopolito 1:944348c50dd6 217 i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 218 stato_FF_MT_SRC=i2c.read(0);
capopolito 1:944348c50dd6 219 i2c.stop();
capopolito 1:944348c50dd6 220 printf("stato_FF_MT_SRC: %1.2d \n", stato_FF_MT_SRC);
capopolito 1:944348c50dd6 221 //controllo sullo stato
capopolito 1:944348c50dd6 222 // se il flag SRC_FF_MT==1 (bit 7) del registro INT_SOURCE
capopolito 1:944348c50dd6 223 if (stato_INT_SOURCE &&0x04 == 0x04) {
capopolito 1:944348c50dd6 224 printf("Buongiorno \n");
serenabpolito 0:4317f4b1a4b3 225 //lettura degli assi con lettura Multiple Byte Read
capopolito 1:944348c50dd6 226 // i2c.start();
capopolito 1:944348c50dd6 227 // i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 228 // i2c.write(OUT_X_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X
capopolito 1:944348c50dd6 229 // i2c.start();
capopolito 1:944348c50dd6 230 // i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 231 // x_axis=i2c.read(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su x_axis
capopolito 1:944348c50dd6 232 // y_axis=i2c.read(1); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su y_axis
capopolito 1:944348c50dd6 233 // z_axis=i2c.read(0); // scrive bit di AK (acknowlodgement) e salva il dato sul bus su z_axis
capopolito 1:944348c50dd6 234 // i2c.stop();
capopolito 1:944348c50dd6 235
capopolito 1:944348c50dd6 236 //lettura degli assi con lettura Single Byte Read
capopolito 1:944348c50dd6 237 // asse x
serenabpolito 0:4317f4b1a4b3 238 i2c.start();
serenabpolito 0:4317f4b1a4b3 239 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
serenabpolito 0:4317f4b1a4b3 240 i2c.write(OUT_X_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X
serenabpolito 0:4317f4b1a4b3 241 i2c.start();
serenabpolito 0:4317f4b1a4b3 242 i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 243 x_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su x_axis
capopolito 1:944348c50dd6 244 i2c.stop();
capopolito 1:944348c50dd6 245 // asse y
capopolito 1:944348c50dd6 246 i2c.start();
capopolito 1:944348c50dd6 247 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 248 i2c.write(OUT_Y_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Y
capopolito 1:944348c50dd6 249 i2c.start();
capopolito 1:944348c50dd6 250 i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 251 y_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su y_axis
serenabpolito 0:4317f4b1a4b3 252 i2c.stop();
capopolito 1:944348c50dd6 253 // asse Z
capopolito 1:944348c50dd6 254 i2c.start();
capopolito 1:944348c50dd6 255 i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura
capopolito 1:944348c50dd6 256 i2c.write(OUT_Z_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Z
capopolito 1:944348c50dd6 257 i2c.start();
capopolito 1:944348c50dd6 258 i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read
capopolito 1:944348c50dd6 259 z_axis=i2c.read(0); // scrive bit di NAK (no acknowlodgement) e salva il dato sul bus su z_axis
capopolito 1:944348c50dd6 260 i2c.stop();
capopolito 1:944348c50dd6 261
capopolito 1:944348c50dd6 262 //accendo led
serenabpolito 0:4317f4b1a4b3 263 rled = 1.0f - x_axis/256;
serenabpolito 0:4317f4b1a4b3 264 gled = 1.0f - y_axis/256;
serenabpolito 0:4317f4b1a4b3 265 bled = 1.0f - z_axis/256;
serenabpolito 0:4317f4b1a4b3 266 wait(0.1f);
capopolito 1:944348c50dd6 267 //scrivo sulla seriale
capopolito 1:944348c50dd6 268 printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis/256, y_axis/256, z_axis/256);
capopolito 1:944348c50dd6 269 }
capopolito 1:944348c50dd6 270 else {
capopolito 1:944348c50dd6 271 printf("sto ancora dormendo\n");
capopolito 1:944348c50dd6 272 }
serenabpolito 0:4317f4b1a4b3 273 }
serenabpolito 0:4317f4b1a4b3 274 }
serenabpolito 0:4317f4b1a4b3 275