Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Lab2 by
main.cpp@4:c40acfb63133, 2015-01-20 (annotated)
- Committer:
- capopolito
- Date:
- Tue Jan 20 23:03:39 2015 +0000
- Revision:
- 4:c40acfb63133
- Parent:
- 3:f8f4a33c7aa2
- Child:
- 5:bc92e421d5f8
Questo dovrebbe essere il codice dell'esperienza 3 terminato...; rimane solo da ripulirlo un po' e farlo vedere al prof... MA credo sia ok!;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| serenabpolito | 0:4317f4b1a4b3 | 1 | #include "mbed.h" |
| serenabpolito | 0:4317f4b1a4b3 | 2 | #include "MMA8451Q.h" |
| serenabpolito | 0:4317f4b1a4b3 | 3 | #include "I2C.h" |
| capopolito | 3:f8f4a33c7aa2 | 4 | #include "SPI.h" |
| capopolito | 3:f8f4a33c7aa2 | 5 | #include "DigitalIn.h" |
| capopolito | 4:c40acfb63133 | 6 | #include "DigitalOut.h" |
| capopolito | 3:f8f4a33c7aa2 | 7 | |
| capopolito | 3:f8f4a33c7aa2 | 8 | //--prova-------------------------------------------- |
| capopolito | 3:f8f4a33c7aa2 | 9 | //PinName const INT1 = PTA14 ; //pin interrupt |
| capopolito | 3:f8f4a33c7aa2 | 10 | //PinName const INT2 = PTA15 ; //pin interrupt |
| capopolito | 3:f8f4a33c7aa2 | 11 | //--prova-------------------------------------------- |
| serenabpolito | 0:4317f4b1a4b3 | 12 | |
| serenabpolito | 0:4317f4b1a4b3 | 13 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
| serenabpolito | 0:4317f4b1a4b3 | 14 | PinName const SDA = PTE25; |
| serenabpolito | 0:4317f4b1a4b3 | 15 | PinName const SCL = PTE24; |
| serenabpolito | 0:4317f4b1a4b3 | 16 | #elif defined (TARGET_KL05Z) |
| serenabpolito | 0:4317f4b1a4b3 | 17 | PinName const SDA = PTB4; |
| serenabpolito | 0:4317f4b1a4b3 | 18 | PinName const SCL = PTB3; |
| serenabpolito | 0:4317f4b1a4b3 | 19 | #elif defined (TARGET_K20D50M) |
| serenabpolito | 0:4317f4b1a4b3 | 20 | PinName const SDA = PTB1; |
| serenabpolito | 0:4317f4b1a4b3 | 21 | PinName const SCL = PTB0; |
| serenabpolito | 0:4317f4b1a4b3 | 22 | #else |
| serenabpolito | 0:4317f4b1a4b3 | 23 | #error TARGET NOT DEFINED |
| serenabpolito | 0:4317f4b1a4b3 | 24 | #endif |
| serenabpolito | 0:4317f4b1a4b3 | 25 | |
| capopolito | 3:f8f4a33c7aa2 | 26 | //--RELATIVI ALLA COMUNICAZIONE SPI------ |
| capopolito | 3:f8f4a33c7aa2 | 27 | PinName const mosi = PTD2; //mosi SPI1_mosi |
| capopolito | 3:f8f4a33c7aa2 | 28 | PinName const miso = PTD3; //miso SPI1_miso |
| capopolito | 3:f8f4a33c7aa2 | 29 | PinName const sck = PTD1; //sck SPI1_sck |
| capopolito | 3:f8f4a33c7aa2 | 30 | PinName const pcs0 = PTD0; //pcs0 SPI1_pcs0 |
| capopolito | 3:f8f4a33c7aa2 | 31 | //--RELATIVI ALLA COMUNICAZIONE SPI------ |
| serenabpolito | 0:4317f4b1a4b3 | 32 | |
| capopolito | 3:f8f4a33c7aa2 | 33 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
| serenabpolito | 0:4317f4b1a4b3 | 34 | //instanzia e inizializza oggettto i2c della clase I2C |
| serenabpolito | 0:4317f4b1a4b3 | 35 | I2C i2c(SDA,SCL); // SDA I2C data line pin |
| capopolito | 3:f8f4a33c7aa2 | 36 | // SCL I2C clock line pin |
| capopolito | 3:f8f4a33c7aa2 | 37 | //--prova------------------------------------------------------------ |
| capopolito | 3:f8f4a33c7aa2 | 38 | //instanzia e inizializza oggetti int1 e int2 della classe DigitalIn |
| capopolito | 4:c40acfb63133 | 39 | //DigitalIn int1(INT1); //inizializza int1 |
| capopolito | 4:c40acfb63133 | 40 | //DigitalIn int2(INT2); //inizializza int2 |
| capopolito | 3:f8f4a33c7aa2 | 41 | //--prova------------------------------------------------------------ |
| serenabpolito | 0:4317f4b1a4b3 | 42 | |
| serenabpolito | 0:4317f4b1a4b3 | 43 | |
| capopolito | 4:c40acfb63133 | 44 | //instanzia e inizializza oggettto spi della classe SPI |
| capopolito | 4:c40acfb63133 | 45 | SPI spi(mosi,miso,sck); |
| capopolito | 4:c40acfb63133 | 46 | DigitalOut slave_select(pcs0,1); //inizializza slave-select |
| capopolito | 4:c40acfb63133 | 47 | //------------------------------------------------------- |
| capopolito | 4:c40acfb63133 | 48 | |
| capopolito | 3:f8f4a33c7aa2 | 49 | //registri da impostare |
| capopolito | 2:53521a18c3de | 50 | char CTRL_REG_1 = 0x2A ; //read/write // register address del CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 51 | char CTRL_REG_2 = 0x2B ; //read/write // register address del CTRL_REG_2 |
| capopolito | 2:53521a18c3de | 52 | char CTRL_REG_3 = 0x2C ; //read/write // register address del CTRL_REG_3 |
| capopolito | 2:53521a18c3de | 53 | char CTRL_REG_4 = 0x2D ; //read/write // register address del CTRL_REG_4 |
| capopolito | 2:53521a18c3de | 54 | char OUT_X_MSB = 0x01 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse x |
| capopolito | 2:53521a18c3de | 55 | char OUT_Y_MSB = 0x03 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse y |
| capopolito | 2:53521a18c3de | 56 | char OUT_Z_MSB = 0x05 ; //read only // parte più significativa del registro contenete l'accelerazione sull'asse z |
| capopolito | 2:53521a18c3de | 57 | char XYZ_DATA_CFG = 0x0E; //read/write // register address del XYZ_DATA_CFG |
| capopolito | 2:53521a18c3de | 58 | char ASLP_COUNT= 0x29; //read/write // register address SLEEP TIME-OUT COUNTER |
| capopolito | 2:53521a18c3de | 59 | char SYSMOD = 0x0B; //read only // register address SYSMOD System Mode Register |
| capopolito | 4:c40acfb63133 | 60 | //registri da impostare------------------------------------------------------------------- |
| capopolito | 4:c40acfb63133 | 61 | |
| capopolito | 4:c40acfb63133 | 62 | //-indirizzo del dipositivo con l'ultimo bit asserito per la lettura e negato per la scrittura |
| capopolito | 3:f8f4a33c7aa2 | 63 | char address_wr = 0x3A ; // byte per eseguire lettura: address_device + bit_wr(W=0) |
| capopolito | 3:f8f4a33c7aa2 | 64 | char address_rd = 0x3B ; // byte per eseguire scrittura: address_device + bit_rd(R=1) |
| capopolito | 4:c40acfb63133 | 65 | //------------------------------------------------------------------------------------------------ |
| capopolito | 4:c40acfb63133 | 66 | |
| capopolito | 4:c40acfb63133 | 67 | //--variabile di appoggio utilizzata per scrivere e leggere i registri |
| capopolito | 3:f8f4a33c7aa2 | 68 | char data = 0x00 ; // inizalizza la variabile data con le impostazioni da scrivere su CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 69 | |
| capopolito | 3:f8f4a33c7aa2 | 70 | //--registri aggiunti e settati per prova ------------------------------------------------------------------ |
| capopolito | 3:f8f4a33c7aa2 | 71 | char CTRL_REG_5 = 0x2E ; //read/write // register address del CTRL_REG_5 |
| capopolito | 3:f8f4a33c7aa2 | 72 | char FF_MT_CFG = 0x15; //read/write // registera addres del FF_MT_CFG (Frefall/Motionn Configuration register |
| capopolito | 3:f8f4a33c7aa2 | 73 | char FF_MT_THS = 0x17; //read/write // register address del FF_MT_THS Freefall and Motion Threshold |
| capopolito | 3:f8f4a33c7aa2 | 74 | char FF_MT_COUNT = 0x18; //read/write //register address del FF_MT_COUNT Debounce Register |
| capopolito | 3:f8f4a33c7aa2 | 75 | //--registri aggiunti e settati per prova --------------------------------------------------------------------- |
| serenabpolito | 0:4317f4b1a4b3 | 76 | |
| serenabpolito | 0:4317f4b1a4b3 | 77 | int main(void) |
| serenabpolito | 0:4317f4b1a4b3 | 78 | { |
| capopolito | 4:c40acfb63133 | 79 | printf("inizio \n"); |
| capopolito | 4:c40acfb63133 | 80 | //--setting delle impostazioni del SPI in base alle specifiche------------------ |
| capopolito | 4:c40acfb63133 | 81 | int bits = 8; |
| capopolito | 4:c40acfb63133 | 82 | int mode = 1; |
| capopolito | 4:c40acfb63133 | 83 | spi.format(bits,mode);//definisce formato spi con 16 bit e pol=0 e pha=1 |
| capopolito | 4:c40acfb63133 | 84 | //di default la frequenza è 1MHz |
| capopolito | 4:c40acfb63133 | 85 | char command_wr=0x80; //comando per la scrittura (10000DDD), di default nella locazione DDD=000 |
| capopolito | 4:c40acfb63133 | 86 | //int command_rd=0; //comando per la lettura (00000DDD), dib default nella locazione DDD=000 |
| capopolito | 4:c40acfb63133 | 87 | //non utilizzato ! |
| capopolito | 4:c40acfb63133 | 88 | //--setting delle impostazioni della SPI come da specifiche------------------------ |
| serenabpolito | 0:4317f4b1a4b3 | 89 | |
| capopolito | 4:c40acfb63133 | 90 | //impostazione dei registri dell'I2C con scrittura Single Byte Write |
| serenabpolito | 0:4317f4b1a4b3 | 91 | // setta impostazioni su CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 92 | data = 0x58 ; // setta la variabile data con le impostazioni da scrivere su CTRL_REG_1 |
| capopolito | 2:53521a18c3de | 93 | //Bit 7-> ASLP_RATE1 = 0 |
| capopolito | 2:53521a18c3de | 94 | //Bit 6-> ASLP_RATE0 = 1 -> // Il sample rate in sleep è 6.25 Hz vedi AN070 |
| capopolito | 2:53521a18c3de | 95 | //Bit 5-> DR2 = 0 |
| capopolito | 2:53521a18c3de | 96 | //Bit 4-> DR1 = 1 |
| capopolito | 2:53521a18c3de | 97 | //Bit 3-> DR0 = 1 -> // Il sample rate in wake è 100 Hz vedi AN070 |
| capopolito | 2:53521a18c3de | 98 | //Bit 2-> LNOISE = 0 |
| capopolito | 3:f8f4a33c7aa2 | 99 | //Bit 1-> F_READ = 0 -> //Faste read is enabled, acquissco un solo byte! |
| capopolito | 2:53521a18c3de | 100 | //Bit 0-> ACTIVE = 0 -> //Mette il dispositivo in standby per settare gli altri registri |
| serenabpolito | 0:4317f4b1a4b3 | 101 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 102 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 103 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 104 | i2c.write(data); // scrivi il "data" già inizializzato con le impostazioni del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 105 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 106 | //NOTE: |
| capopolito | 3:f8f4a33c7aa2 | 107 | //La modalità "FAST READ", che si attiva asserendo il bit F_READ, può non essere impostata perchè |
| capopolito | 3:f8f4a33c7aa2 | 108 | //per campionare il dato con risoluzione 8 bit è sufficente leggere solo la parte |
| capopolito | 3:f8f4a33c7aa2 | 109 | //significativa del dato contenuta nei registri OUT_MSB_X, Y e Z. |
| capopolito | 3:f8f4a33c7aa2 | 110 | //Cambio la frequenz di campionamento, valore dell'ODR (Over Sampling Ratio), |
| capopolito | 3:f8f4a33c7aa2 | 111 | //dalla modalità sleep alla modalità wake (in modo da accorgermi di essere in wake) |
| capopolito | 3:f8f4a33c7aa2 | 112 | |
| serenabpolito | 0:4317f4b1a4b3 | 113 | |
| serenabpolito | 0:4317f4b1a4b3 | 114 | // setta impostazioni su CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 115 | data=0x04; //imposta data con le impostazioni del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 116 | //ST=0 disabilita il self-test |
| serenabpolito | 0:4317f4b1a4b3 | 117 | //RST=0 disabilita modalità reset |
| serenabpolito | 0:4317f4b1a4b3 | 118 | //bit 5 don't care |
| serenabpolito | 0:4317f4b1a4b3 | 119 | //SMODS0=SMODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in sleep |
| capopolito | 2:53521a18c3de | 120 | //SLPE=1 abilita l'autosleep -> vedi AN070 |
| serenabpolito | 0:4317f4b1a4b3 | 121 | //MODS0=MODS1=0 setta la modalità oversampling_mode = normal , quando è in modalità in active |
| serenabpolito | 0:4317f4b1a4b3 | 122 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 123 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 124 | i2c.write(CTRL_REG_2); // scrivi l'indirizzo del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 125 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_2 |
| serenabpolito | 0:4317f4b1a4b3 | 126 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 127 | |
| serenabpolito | 0:4317f4b1a4b3 | 128 | // setta impostazioni su CTRL_REG_3 |
| capopolito | 3:f8f4a33c7aa2 | 129 | data=0x68; //imposta data con le impostazioni del CTRL_REG_3 attineti alle gestioni dell'interupt in modalità sleep |
| serenabpolito | 0:4317f4b1a4b3 | 130 | // vedi data-sheet |
| capopolito | 1:944348c50dd6 | 131 | //Bit 7-> FIFO GATE = 0 |
| capopolito | 3:f8f4a33c7aa2 | 132 | //Bit 6-> WAKE_TRANS = 1 |
| capopolito | 3:f8f4a33c7aa2 | 133 | //Bit 5-> WAKE_LNDRPT = 1 |
| capopolito | 3:f8f4a33c7aa2 | 134 | //Bit 4-> WAKE_PULSE = 0 |
| capopolito | 3:f8f4a33c7aa2 | 135 | //Bit 3-> WAKE_FF_MT = 1 |
| capopolito | 1:944348c50dd6 | 136 | //Bit 2-> don't care |
| capopolito | 1:944348c50dd6 | 137 | //Bit 1-> IPOL = 0 |
| capopolito | 1:944348c50dd6 | 138 | //Bit 0-> PP_OD = 0 |
| serenabpolito | 0:4317f4b1a4b3 | 139 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 140 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 141 | i2c.write(CTRL_REG_3); // scrivi l'indirizzo del CTRL_REG_3 |
| serenabpolito | 0:4317f4b1a4b3 | 142 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_3 |
| serenabpolito | 0:4317f4b1a4b3 | 143 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 144 | |
| serenabpolito | 0:4317f4b1a4b3 | 145 | // setta impostazioni su CTRL_REG_4 |
| capopolito | 3:f8f4a33c7aa2 | 146 | data=0xB5; //imposta data con le impostazioni del CTRL_REG_4 attineti alle gestioni dell'interupt |
| capopolito | 1:944348c50dd6 | 147 | // vedi data-sheet |
| capopolito | 2:53521a18c3de | 148 | //Bit 7-> IN_EN_ASLP = 1 ; se = 1 Auto-SLEEP/WAKE interrupt enabled -> vedi AN070 |
| capopolito | 1:944348c50dd6 | 149 | //Bit 6-> INT_EN_FIFO = 0 |
| capopolito | 3:f8f4a33c7aa2 | 150 | //Bit 5-> INT_EN_TRANS = 1 |
| capopolito | 3:f8f4a33c7aa2 | 151 | //Bit 4-> INT_EN_LNDPRT = 1 |
| capopolito | 3:f8f4a33c7aa2 | 152 | //Bit 3-> INT_EN_PULSE = 0 |
| capopolito | 3:f8f4a33c7aa2 | 153 | //Bit 2-> INT_EN_FF_MT = 1 |
| capopolito | 1:944348c50dd6 | 154 | //Bit 1-> don't care = 0 |
| capopolito | 3:f8f4a33c7aa2 | 155 | //Bit 0-> INT_EN_DRDY = 1 ;// abilito data ready per motivi di logica interna pur no usandolo |
| serenabpolito | 0:4317f4b1a4b3 | 156 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 157 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 158 | i2c.write(CTRL_REG_4); // scrivi l'indirizzo del CTRL_REG_4 |
| serenabpolito | 0:4317f4b1a4b3 | 159 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_4 |
| serenabpolito | 0:4317f4b1a4b3 | 160 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 161 | |
| serenabpolito | 0:4317f4b1a4b3 | 162 | // setta impostazioni su XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 163 | data=0x00; //imposta data con le impostazioni del XYZ_DATA_CFG attineti alla dinamica che si vuole acquisire (+-2g) |
| serenabpolito | 0:4317f4b1a4b3 | 164 | // FS1=FS0=0 imposta la dinamica +-2g |
| serenabpolito | 0:4317f4b1a4b3 | 165 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 166 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 167 | i2c.write(XYZ_DATA_CFG); // scrivi l'indirizzo del XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 168 | i2c.write(data); // scrivi il "data" contenete le impostazioni del XYZ_DATA_CFG |
| serenabpolito | 0:4317f4b1a4b3 | 169 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 170 | |
| capopolito | 3:f8f4a33c7aa2 | 171 | //setta impostazioni su ASLP_COUNT |
| capopolito | 4:c40acfb63133 | 172 | data=0xF0; //->impostato da me valore max |
| capopolito | 3:f8f4a33c7aa2 | 173 | //data=0x01; //impostato da me valore min |
| capopolito | 3:f8f4a33c7aa2 | 174 | //data=0x04; //imposta data con le impostazioni del ASLP_COUNT -> impostato dal professore!!! |
| capopolito | 3:f8f4a33c7aa2 | 175 | i2c.start(); // dai lo start |
| capopolito | 3:f8f4a33c7aa2 | 176 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 177 | i2c.write(ASLP_COUNT); // scrivi l'indirizzo del ASLP_COUNT |
| capopolito | 3:f8f4a33c7aa2 | 178 | i2c.write(data); // scrivi il "data" contenete le impostazioni del ASLP_COUNT |
| capopolito | 3:f8f4a33c7aa2 | 179 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 180 | |
| capopolito | 3:f8f4a33c7aa2 | 181 | //---registri impostati per prova --------------------------------- |
| capopolito | 3:f8f4a33c7aa2 | 182 | |
| capopolito | 3:f8f4a33c7aa2 | 183 | |
| capopolito | 3:f8f4a33c7aa2 | 184 | // setta impostazioni su CTRL_REG_5 |
| capopolito | 3:f8f4a33c7aa2 | 185 | data=0x81; //imposta data con le impostazioni del CTRL_REG_5 attineti alle gestioni dell'interupt nei pin |
| capopolito | 3:f8f4a33c7aa2 | 186 | // vedi data-sheet |
| capopolito | 3:f8f4a33c7aa2 | 187 | //Bit 7-> INT_CFG_ASLP = 1 route the auto-sleep interrupt to INT1 ->vedi AN074 |
| capopolito | 3:f8f4a33c7aa2 | 188 | //Bit 6-> INT_CFG_FIFO = 0 |
| capopolito | 3:f8f4a33c7aa2 | 189 | //Bit 5-> INT_CFG_TRANS = 0 |
| capopolito | 3:f8f4a33c7aa2 | 190 | //Bit 4-> INT_CFG_LNDPRT = 0 |
| capopolito | 3:f8f4a33c7aa2 | 191 | //Bit 3-> INT_CFG_PULSE = 0 route the pulse interrupt to INT2 ->vedi AN074 |
| capopolito | 3:f8f4a33c7aa2 | 192 | //Bit 2-> INT_CFG_FF_MT = 0 route the Motion and Orientation interrupt to INT2 ->vedi AN074 |
| capopolito | 3:f8f4a33c7aa2 | 193 | //Bit 1-> DON'T CARE = 0 |
| capopolito | 3:f8f4a33c7aa2 | 194 | //Bit 0-> INT_CFG_DRDY = 1 route the data-ready interrupt to INT1 ->vedi AN074 |
| capopolito | 3:f8f4a33c7aa2 | 195 | i2c.start(); // dai lo start |
| capopolito | 3:f8f4a33c7aa2 | 196 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 197 | i2c.write(CTRL_REG_5); // scrivi l'indirizzo del CTRL_REG_5 |
| capopolito | 3:f8f4a33c7aa2 | 198 | i2c.write(data); // scrivi il "data" contenete le impostazioni del CTRL_REG_5 |
| capopolito | 3:f8f4a33c7aa2 | 199 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 200 | |
| capopolito | 1:944348c50dd6 | 201 | // setta impostazioni su FF_MT_CFG (Frefall/Motion Configuration Register (Read/Write) |
| capopolito | 3:f8f4a33c7aa2 | 202 | data=0xF8; //imposta data con le impostazioni del FF_MT_SRC attineti quando vogliamo svegliare il dispositivo dal wake |
| capopolito | 1:944348c50dd6 | 203 | //Bit 7-> ELE = 1 ;event flag latch enabled in FF_MT_SRC |
| capopolito | 3:f8f4a33c7aa2 | 204 | //Bit 6-> OAE = 1 ;Motion Flag (if=1 OR combination) (if=1 AND combination) |
| capopolito | 1:944348c50dd6 | 205 | //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 | 206 | //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 | 207 | //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 | 208 | //Bit 2-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 209 | //Bit 1-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 210 | //Bit 0-> = 0 don't care |
| capopolito | 1:944348c50dd6 | 211 | i2c.start(); // dai lo start |
| capopolito | 1:944348c50dd6 | 212 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 1:944348c50dd6 | 213 | i2c.write(FF_MT_CFG); // scrivi l'indirizzo del FF_MT_CFG |
| capopolito | 1:944348c50dd6 | 214 | i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_CFG |
| capopolito | 1:944348c50dd6 | 215 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 216 | |
| capopolito | 3:f8f4a33c7aa2 | 217 | |
| capopolito | 3:f8f4a33c7aa2 | 218 | // setta impostazioni su FF_MT_THS (Read/Write) |
| capopolito | 3:f8f4a33c7aa2 | 219 | data=0x04; //imposta data con le impostazioni del FF_MT_THS |
| capopolito | 2:53521a18c3de | 220 | i2c.start(); // dai lo start |
| capopolito | 2:53521a18c3de | 221 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 222 | i2c.write(FF_MT_THS); // scrivi l'indirizzo del FF_MT_THS |
| capopolito | 3:f8f4a33c7aa2 | 223 | i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_THS |
| capopolito | 3:f8f4a33c7aa2 | 224 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 225 | |
| capopolito | 3:f8f4a33c7aa2 | 226 | // setta impostazioni su FF_MT_COUNT (Read/Write) |
| capopolito | 3:f8f4a33c7aa2 | 227 | data=0x08; //imposta data con le impostazioni del FF_MT_COUNT |
| capopolito | 3:f8f4a33c7aa2 | 228 | i2c.start(); // dai lo start |
| capopolito | 3:f8f4a33c7aa2 | 229 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 230 | i2c.write(FF_MT_COUNT); // scrivi l'indirizzo del FF_MT_COUNT |
| capopolito | 3:f8f4a33c7aa2 | 231 | i2c.write(data); // scrivi il "data" contenete le impostazioni del FF_MT_COUNT |
| capopolito | 2:53521a18c3de | 232 | i2c.stop(); |
| capopolito | 1:944348c50dd6 | 233 | |
| capopolito | 3:f8f4a33c7aa2 | 234 | //---registri impostati per prova --------------------------------- |
| capopolito | 3:f8f4a33c7aa2 | 235 | |
| capopolito | 3:f8f4a33c7aa2 | 236 | |
| capopolito | 2:53521a18c3de | 237 | //!!! attiva il dispositivo (esce da standby) !!! |
| serenabpolito | 0:4317f4b1a4b3 | 238 | // setta impostazioni su CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 239 | data=0x5B ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati) |
| capopolito | 3:f8f4a33c7aa2 | 240 | i2c.start(); // dai lo start |
| serenabpolito | 0:4317f4b1a4b3 | 241 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| serenabpolito | 0:4317f4b1a4b3 | 242 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 243 | i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1 |
| serenabpolito | 0:4317f4b1a4b3 | 244 | i2c.stop(); |
| serenabpolito | 0:4317f4b1a4b3 | 245 | |
| capopolito | 3:f8f4a33c7aa2 | 246 | //PER ACCENDERE LED |
| serenabpolito | 0:4317f4b1a4b3 | 247 | PwmOut rled(LED1); |
| serenabpolito | 0:4317f4b1a4b3 | 248 | PwmOut gled(LED2); |
| capopolito | 1:944348c50dd6 | 249 | PwmOut bled(LED3); |
| capopolito | 1:944348c50dd6 | 250 | |
| capopolito | 3:f8f4a33c7aa2 | 251 | //verifica della corretta scrittura dei registri, mediante lettura Single Byte Read |
| capopolito | 2:53521a18c3de | 252 | |
| capopolito | 3:f8f4a33c7aa2 | 253 | //lettura single byte read del registro CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 254 | char ctrl_reg_1 = 0x00; |
| capopolito | 2:53521a18c3de | 255 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 256 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 257 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 258 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 259 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 260 | ctrl_reg_1=i2c.read(0); |
| capopolito | 2:53521a18c3de | 261 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 262 | printf("CTRL_REG_1: %1.2x \n", ctrl_reg_1); // in esadecimale |
| capopolito | 2:53521a18c3de | 263 | |
| capopolito | 3:f8f4a33c7aa2 | 264 | //lettura single byte read del registro CTRL_REG_2 |
| capopolito | 2:53521a18c3de | 265 | char ctrl_reg_2 = 0x00; |
| capopolito | 2:53521a18c3de | 266 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 267 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 268 | i2c.write(CTRL_REG_2); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 269 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 270 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 271 | ctrl_reg_2=i2c.read(0); |
| capopolito | 2:53521a18c3de | 272 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 273 | printf("CTRL_REG_2: %1.2x \n", ctrl_reg_2); //in esadecimale |
| capopolito | 2:53521a18c3de | 274 | |
| capopolito | 2:53521a18c3de | 275 | //lettura single byte read del registro CTRL_REG_3 |
| capopolito | 3:f8f4a33c7aa2 | 276 | char ctrl_reg_3 = 0x00; |
| capopolito | 2:53521a18c3de | 277 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 278 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 279 | i2c.write(CTRL_REG_3); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 280 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 281 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 282 | ctrl_reg_3=i2c.read(0); |
| capopolito | 2:53521a18c3de | 283 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 284 | printf("CTRL_REG_3: %1.2x \n", ctrl_reg_3); //in esadecimale |
| capopolito | 2:53521a18c3de | 285 | |
| capopolito | 3:f8f4a33c7aa2 | 286 | //lettura single byte read del registro CTRL_REG_4 |
| capopolito | 2:53521a18c3de | 287 | char ctrl_reg_4 = 0x00; |
| capopolito | 2:53521a18c3de | 288 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 289 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 290 | i2c.write(CTRL_REG_4); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 291 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 292 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 293 | ctrl_reg_4=i2c.read(0); |
| capopolito | 2:53521a18c3de | 294 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 295 | printf("CTRL_REG_4: %1.2x \n", ctrl_reg_4); //in esadecimale |
| capopolito | 3:f8f4a33c7aa2 | 296 | |
| capopolito | 3:f8f4a33c7aa2 | 297 | //lettura single byte read del registro ASLP_COUNT |
| capopolito | 3:f8f4a33c7aa2 | 298 | char aslp_count = 0x00; |
| capopolito | 2:53521a18c3de | 299 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 300 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 2:53521a18c3de | 301 | i2c.write(ASLP_COUNT); // scrivi l'indirizzo del registro |
| capopolito | 2:53521a18c3de | 302 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 303 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 304 | aslp_count=i2c.read(0); |
| capopolito | 2:53521a18c3de | 305 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 306 | printf("ASLP_COUNT: %1.2x \n", aslp_count); //in esadecimale |
| capopolito | 3:f8f4a33c7aa2 | 307 | |
| capopolito | 2:53521a18c3de | 308 | char sysmod = 0x00; |
| capopolito | 4:c40acfb63133 | 309 | |
| capopolito | 4:c40acfb63133 | 310 | float x_axis, y_axis, z_axis; |
| capopolito | 4:c40acfb63133 | 311 | float x_axis_norm, y_axis_norm, z_axis_norm; |
| capopolito | 4:c40acfb63133 | 312 | int x_tens, x_unit, y_tens, y_unit, z_tens, z_unit; |
| capopolito | 4:c40acfb63133 | 313 | char x_tens_ascii, x_unit_ascii, y_tens_ascii, y_unit_ascii, z_tens_ascii, z_unit_ascii; |
| capopolito | 4:c40acfb63133 | 314 | char loc_x_tens=0x00, loc_x_unit=0x01, loc_y_tens=0x02, loc_y_unit=0x03, loc_z_tens=0x04, loc_z_unit=0x05; |
| capopolito | 4:c40acfb63133 | 315 | //location DDD=000, DDD=001, DDD=010, DDD=011, DDD=100, DDD=101; |
| capopolito | 4:c40acfb63133 | 316 | |
| capopolito | 4:c40acfb63133 | 317 | char command_location=0x00; // in caso di scrittura 1000 DDD |
| capopolito | 4:c40acfb63133 | 318 | |
| capopolito | 3:f8f4a33c7aa2 | 319 | //int int1_value = 0; |
| capopolito | 3:f8f4a33c7aa2 | 320 | //int int2_value = 0; |
| serenabpolito | 0:4317f4b1a4b3 | 321 | while (true) { |
| capopolito | 3:f8f4a33c7aa2 | 322 | printf("SYSMOD_pre_read: %1.2x \n", sysmod); |
| capopolito | 3:f8f4a33c7aa2 | 323 | wait(0.1); |
| capopolito | 3:f8f4a33c7aa2 | 324 | //lettura dello stato dell'accelerometro wake o sleep |
| capopolito | 3:f8f4a33c7aa2 | 325 | // lettura single Byte Read contenuto di SYSMOD System Mode Register |
| capopolito | 3:f8f4a33c7aa2 | 326 | // Bit 7-> FGERR |
| capopolito | 3:f8f4a33c7aa2 | 327 | // Bit 6-> FGT_4 |
| capopolito | 3:f8f4a33c7aa2 | 328 | // Bit 5-> FGT_3 |
| capopolito | 3:f8f4a33c7aa2 | 329 | // Bit 4-> FGT_2 |
| capopolito | 3:f8f4a33c7aa2 | 330 | // Bit 3-> FGT_1 |
| capopolito | 3:f8f4a33c7aa2 | 331 | // Bit 2-> FGT_0 |
| capopolito | 3:f8f4a33c7aa2 | 332 | // Bit 1-> SYSMOD1 |
| capopolito | 3:f8f4a33c7aa2 | 333 | // Bit 0-> SYSMOD0 |
| capopolito | 3:f8f4a33c7aa2 | 334 | // SYSMOD[1:0] |
| capopolito | 3:f8f4a33c7aa2 | 335 | // System Mode. Default value: 00. |
| capopolito | 3:f8f4a33c7aa2 | 336 | // 00: STANDBY mode |
| capopolito | 3:f8f4a33c7aa2 | 337 | // 01: WAKE mode |
| capopolito | 3:f8f4a33c7aa2 | 338 | // 10: SLEEP mode |
| capopolito | 1:944348c50dd6 | 339 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 340 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 341 | i2c.write(SYSMOD); // scrivi l'indirizzo del registro |
| capopolito | 1:944348c50dd6 | 342 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 343 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 2:53521a18c3de | 344 | sysmod=i2c.read(0); |
| capopolito | 2:53521a18c3de | 345 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 346 | printf("SYSMOD_post_read: %1.2x \n", sysmod); |
| capopolito | 2:53521a18c3de | 347 | wait(0.1f); |
| capopolito | 3:f8f4a33c7aa2 | 348 | if ( (sysmod &0x02) == 0x02) { // if SYSMOD1,SYSMOD0 = 1,0 |
| capopolito | 3:f8f4a33c7aa2 | 349 | wait(0.1f); |
| capopolito | 3:f8f4a33c7aa2 | 350 | printf("I'm sleeping , SYSMOD: %1.2x \n",sysmod); |
| capopolito | 3:f8f4a33c7aa2 | 351 | rled = 0.0f; |
| capopolito | 3:f8f4a33c7aa2 | 352 | gled = 0.0f; |
| capopolito | 3:f8f4a33c7aa2 | 353 | bled = 0.0f; |
| capopolito | 3:f8f4a33c7aa2 | 354 | //---prova------------------------------------------------ |
| capopolito | 3:f8f4a33c7aa2 | 355 | //mette il dispositivo in standby |
| capopolito | 3:f8f4a33c7aa2 | 356 | //setta impostazioni su CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 357 | data=0x5A ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati) |
| capopolito | 3:f8f4a33c7aa2 | 358 | i2c.start(); // dai lo start |
| capopolito | 3:f8f4a33c7aa2 | 359 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 360 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 361 | i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 362 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 363 | //attiva il dispositivo |
| capopolito | 3:f8f4a33c7aa2 | 364 | //setta impostazioni su CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 365 | data=0x5B ; // mette a 1 il bit ACTIVE e lascia invariati gli altri (già impostati) |
| capopolito | 3:f8f4a33c7aa2 | 366 | i2c.start(); // dai lo start |
| capopolito | 3:f8f4a33c7aa2 | 367 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 368 | i2c.write(CTRL_REG_1); // scrivi l'indirizzo del CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 369 | i2c.write(data); // scrivi il "data" in le impostazioni del CTRL_REG_1 |
| capopolito | 3:f8f4a33c7aa2 | 370 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 371 | //int1_value=int1.read(); |
| capopolito | 3:f8f4a33c7aa2 | 372 | //int2_value=int2.read(); |
| capopolito | 3:f8f4a33c7aa2 | 373 | //printf("INT1_sleep: %1.2d \n",INT1); |
| capopolito | 3:f8f4a33c7aa2 | 374 | //printf("INT2_sleep: %1.2d \n",INT2); |
| capopolito | 3:f8f4a33c7aa2 | 375 | //---prova------------------------------------------------ |
| capopolito | 3:f8f4a33c7aa2 | 376 | |
| capopolito | 2:53521a18c3de | 377 | } //chiusra del if |
| capopolito | 3:f8f4a33c7aa2 | 378 | if ( (sysmod &0x01) ==0x01){ // if SYSMOD1,SYSMOD0 = 0,1 |
| capopolito | 3:f8f4a33c7aa2 | 379 | //---prova------------------------------------------------- |
| capopolito | 3:f8f4a33c7aa2 | 380 | //int1_value=int1.read; |
| capopolito | 3:f8f4a33c7aa2 | 381 | //int2_value=int2.read; |
| capopolito | 3:f8f4a33c7aa2 | 382 | //printf("INT1_wake: %1.2d \n",INT1); |
| capopolito | 3:f8f4a33c7aa2 | 383 | //printf("INT2_wake: %1.2d \n",INT2); |
| capopolito | 3:f8f4a33c7aa2 | 384 | //---prova------------------------------------------------- |
| capopolito | 3:f8f4a33c7aa2 | 385 | wait(0.1f); |
| capopolito | 3:f8f4a33c7aa2 | 386 | printf("Good morning! , SYSMOD: %1.2x \n", sysmod); |
| capopolito | 3:f8f4a33c7aa2 | 387 | //lettura degli assi con lettura Single Byte Read |
| capopolito | 3:f8f4a33c7aa2 | 388 | // asse x |
| capopolito | 3:f8f4a33c7aa2 | 389 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 390 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 391 | i2c.write(OUT_X_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse X |
| capopolito | 3:f8f4a33c7aa2 | 392 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 393 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 3:f8f4a33c7aa2 | 394 | x_axis=i2c.read(0); // scrive bit di NAK (non acknowlodgement) e salva il dato sul bus su x_axis |
| capopolito | 3:f8f4a33c7aa2 | 395 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 396 | // asse y |
| capopolito | 3:f8f4a33c7aa2 | 397 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 398 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 399 | i2c.write(OUT_Y_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Y |
| capopolito | 3:f8f4a33c7aa2 | 400 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 401 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 3:f8f4a33c7aa2 | 402 | y_axis=i2c.read(0); // scrive bit di NAK (non acknowlodgement) e salva il dato sul bus su y_axis |
| capopolito | 3:f8f4a33c7aa2 | 403 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 404 | // asse Z |
| capopolito | 3:f8f4a33c7aa2 | 405 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 406 | i2c.write(address_wr); // scrivi e passa l'indirizzo del dispositivo con bit di scrittura |
| capopolito | 3:f8f4a33c7aa2 | 407 | i2c.write(OUT_Z_MSB); // scrivi l'indirizzo del registro contente l'accelerazione sull'asse Z |
| capopolito | 3:f8f4a33c7aa2 | 408 | i2c.start(); |
| capopolito | 3:f8f4a33c7aa2 | 409 | i2c.write(address_rd); // scrivi e passa l'indirizzo del dispositivo con bit di read |
| capopolito | 3:f8f4a33c7aa2 | 410 | z_axis=i2c.read(0); // scrive bit di NAK (non acknowlodgement) e salva il dato sul bus su z_axis |
| capopolito | 3:f8f4a33c7aa2 | 411 | i2c.stop(); |
| capopolito | 3:f8f4a33c7aa2 | 412 | //accendo led |
| capopolito | 4:c40acfb63133 | 413 | rled = 1.0f - x_axis/64; |
| capopolito | 4:c40acfb63133 | 414 | gled = 1.0f - y_axis/64; |
| capopolito | 4:c40acfb63133 | 415 | bled = 1.0f - z_axis/64; |
| capopolito | 3:f8f4a33c7aa2 | 416 | //scrivo sulla seriale |
| capopolito | 3:f8f4a33c7aa2 | 417 | printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis/64, y_axis/64, z_axis/64); |
| capopolito | 3:f8f4a33c7aa2 | 418 | |
| capopolito | 4:c40acfb63133 | 419 | //SCRIVO DATI SU DISPLAY A SETTE SEGMENTI DELLA SCHEDA DE2 MEDIANTE SPI |
| capopolito | 4:c40acfb63133 | 420 | //accelerazione sull'asse x |
| capopolito | 4:c40acfb63133 | 421 | x_axis_norm=x_axis/64*99; // normalizzo tra [0 99] |
| capopolito | 4:c40acfb63133 | 422 | x_tens = (int(x_axis_norm/10)); // ottengo le decine |
| capopolito | 4:c40acfb63133 | 423 | x_unit = (x_axis_norm-10*x_tens); // ottengo le unità |
| capopolito | 4:c40acfb63133 | 424 | x_tens_ascii = ( '0' + (x_tens) ); // ottengo le decine in ASCII |
| capopolito | 4:c40acfb63133 | 425 | x_unit_ascii = ( '0' + (x_unit) ); // ottengo le unità in ASCII |
| capopolito | 4:c40acfb63133 | 426 | //accelerazione sull'asse y |
| capopolito | 4:c40acfb63133 | 427 | y_axis_norm=y_axis/64*99; // normalizzo tra [0 99] |
| capopolito | 4:c40acfb63133 | 428 | y_tens = (int(y_axis_norm/10)); // ottengo le decine |
| capopolito | 4:c40acfb63133 | 429 | y_unit = (y_axis_norm-10*y_tens); // ottengo le unità |
| capopolito | 4:c40acfb63133 | 430 | y_tens_ascii = ( '0' + (y_tens) ); // ottengo le decine in ASCII |
| capopolito | 4:c40acfb63133 | 431 | y_unit_ascii = ( '0' + (y_unit) ); // ottengo le unità in ASCII |
| capopolito | 4:c40acfb63133 | 432 | //accelerazione sull'asse z |
| capopolito | 4:c40acfb63133 | 433 | z_axis_norm=z_axis/64*99; // normalizzo tra [0 99] |
| capopolito | 4:c40acfb63133 | 434 | z_tens = (int(z_axis_norm/10)); // ottengo le decine |
| capopolito | 4:c40acfb63133 | 435 | z_unit = (z_axis_norm-10*z_tens); // ottengo le unità |
| capopolito | 4:c40acfb63133 | 436 | z_tens_ascii = ( '0' + (z_tens) ); // ottengo le decine in ASCII |
| capopolito | 4:c40acfb63133 | 437 | z_unit_ascii = ( '0' + (z_unit) ); // ottengo le unità in ASCII |
| capopolito | 4:c40acfb63133 | 438 | |
| capopolito | 4:c40acfb63133 | 439 | //stampo nella seriale componente x,y,z dell'accelereazione normailzzate tra 0 e 99 |
| capopolito | 4:c40acfb63133 | 440 | printf("ax_norm: %1.2f, ay_norm: %1.2f, az_norm: %1.2f\n", x_axis_norm, y_axis_norm, z_axis_norm); |
| capopolito | 4:c40acfb63133 | 441 | //stampo nella seriale le decine delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
| capopolito | 4:c40acfb63133 | 442 | printf("ax_tens: %1.2d, ay_tens: %1.2d, az_tens: %1.2d\n", x_tens, y_tens, z_tens); |
| capopolito | 4:c40acfb63133 | 443 | //stampo nella seriale le unità delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
| capopolito | 4:c40acfb63133 | 444 | printf("ax_unit: %1.2d, ay_unit: %1.2d, az_unit: %1.2d\n", x_unit, y_unit, z_unit); |
| capopolito | 4:c40acfb63133 | 445 | //stampo nella seriale le decine in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
| capopolito | 4:c40acfb63133 | 446 | printf("ax_tens_ascii: %1.2c, ay_tens_ascii: %1.2c, az_tens_ascii: %1.2c\n", x_tens_ascii, y_tens_ascii, z_tens_ascii); |
| capopolito | 4:c40acfb63133 | 447 | //stampo nella seriale le unità in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
| capopolito | 4:c40acfb63133 | 448 | printf("ax_unit_ascii: %1.2c, ay_unit_ascii: %1.2c, az_unit_ascii: %1.2c\n", x_unit_ascii, y_unit_ascii, z_unit_ascii); |
| capopolito | 4:c40acfb63133 | 449 | |
| capopolito | 4:c40acfb63133 | 450 | //scrivo nei display i valori dell'accelerazione |
| capopolito | 3:f8f4a33c7aa2 | 451 | |
| capopolito | 4:c40acfb63133 | 452 | //componente x dell'accelarazione |
| capopolito | 4:c40acfb63133 | 453 | //scrivo codice ascii delle decine nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 454 | //command_location = char ( (command_wr) + int(loc_tens_x) ) ; //1000 000 = 0x80 |
| capopolito | 4:c40acfb63133 | 455 | command_location = 0x80; |
| capopolito | 4:c40acfb63133 | 456 | slave_select.write(0); |
| capopolito | 4:c40acfb63133 | 457 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 458 | spi.write(x_tens_ascii); |
| capopolito | 4:c40acfb63133 | 459 | slave_select.write(1); |
| capopolito | 4:c40acfb63133 | 460 | //scrivo codice ascii delle unità nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 461 | //command_location = command_wr + loc_unit_x ; //1000 001 = 0x81 |
| capopolito | 4:c40acfb63133 | 462 | command_location = 0x81; |
| capopolito | 4:c40acfb63133 | 463 | slave_select.write(0); |
| capopolito | 4:c40acfb63133 | 464 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 465 | spi.write(x_unit_ascii); |
| capopolito | 4:c40acfb63133 | 466 | slave_select.write(1); |
| capopolito | 4:c40acfb63133 | 467 | |
| capopolito | 4:c40acfb63133 | 468 | //componente y dell'accelarazione |
| capopolito | 4:c40acfb63133 | 469 | //scrivo codice ascii delle decine nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 470 | //command_location = command_wr + loc_tens_y ; //1000 010 = 0x82 |
| capopolito | 4:c40acfb63133 | 471 | command_location = 0x82; |
| capopolito | 4:c40acfb63133 | 472 | slave_select.write(0); //asserisco lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 473 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 474 | spi.write(y_tens_ascii); |
| capopolito | 4:c40acfb63133 | 475 | slave_select.write(1); //nego lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 476 | //scrivo codice ascii delle unità nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 477 | //command_location = command_wr + loc_unit_y ; //1000 011 = 0x83 |
| capopolito | 4:c40acfb63133 | 478 | command_location = 0x83; |
| capopolito | 4:c40acfb63133 | 479 | slave_select.write(0); //asserisco lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 480 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 481 | spi.write(y_unit_ascii); |
| capopolito | 4:c40acfb63133 | 482 | slave_select.write(1); //nego lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 483 | |
| capopolito | 4:c40acfb63133 | 484 | //componente z dell'accelarazione |
| capopolito | 4:c40acfb63133 | 485 | //scrivo codice ascii delle decine nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 486 | //command_location = command_wr + loc_tens_z ; //1000 100 = 0x84 |
| capopolito | 4:c40acfb63133 | 487 | command_location = 0x84; |
| capopolito | 4:c40acfb63133 | 488 | slave_select.write(0); //asserisco lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 489 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 490 | spi.write(z_tens_ascii); |
| capopolito | 4:c40acfb63133 | 491 | slave_select.write(1); //nego lo slave select attivo basso |
| capopolito | 4:c40acfb63133 | 492 | //scrivo codice ascii delle unità nel display nel display dedicato |
| capopolito | 4:c40acfb63133 | 493 | //command_location = command_wr + loc_unit_z ; //1000 101 = 0x85 |
| capopolito | 4:c40acfb63133 | 494 | command_location = 0x85; |
| capopolito | 4:c40acfb63133 | 495 | slave_select.write(0); |
| capopolito | 4:c40acfb63133 | 496 | spi.write(command_location); |
| capopolito | 4:c40acfb63133 | 497 | spi.write(z_unit_ascii); |
| capopolito | 4:c40acfb63133 | 498 | slave_select.write(1); |
| capopolito | 4:c40acfb63133 | 499 | |
| capopolito | 3:f8f4a33c7aa2 | 500 | } //close 2nd if |
| capopolito | 3:f8f4a33c7aa2 | 501 | }//close while |
| capopolito | 3:f8f4a33c7aa2 | 502 | }//close main |
| serenabpolito | 0:4317f4b1a4b3 | 503 |
