
main.cpp@0:a537ef2c204b, 2015-01-20 (annotated)
- Committer:
- capopolito
- Date:
- Tue Jan 20 23:32:40 2015 +0000
- Revision:
- 0:a537ef2c204b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
capopolito | 0:a537ef2c204b | 1 | #include "mbed.h" |
capopolito | 0:a537ef2c204b | 2 | #include "MMA8451Q.h" |
capopolito | 0:a537ef2c204b | 3 | #include "I2C.h" |
capopolito | 0:a537ef2c204b | 4 | #include "SPI.h" |
capopolito | 0:a537ef2c204b | 5 | #include "DigitalIn.h" |
capopolito | 0:a537ef2c204b | 6 | #include "DigitalOut.h" |
capopolito | 0:a537ef2c204b | 7 | |
capopolito | 0:a537ef2c204b | 8 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
capopolito | 0:a537ef2c204b | 9 | PinName const SDA = PTE25; |
capopolito | 0:a537ef2c204b | 10 | PinName const SCL = PTE24; |
capopolito | 0:a537ef2c204b | 11 | #elif defined (TARGET_KL05Z) |
capopolito | 0:a537ef2c204b | 12 | PinName const SDA = PTB4; |
capopolito | 0:a537ef2c204b | 13 | PinName const SCL = PTB3; |
capopolito | 0:a537ef2c204b | 14 | #elif defined (TARGET_K20D50M) |
capopolito | 0:a537ef2c204b | 15 | PinName const SDA = PTB1; |
capopolito | 0:a537ef2c204b | 16 | PinName const SCL = PTB0; |
capopolito | 0:a537ef2c204b | 17 | #else |
capopolito | 0:a537ef2c204b | 18 | #error TARGET NOT DEFINED |
capopolito | 0:a537ef2c204b | 19 | #endif |
capopolito | 0:a537ef2c204b | 20 | |
capopolito | 0:a537ef2c204b | 21 | //--RELATIVI ALLA COMUNICAZIONE SPI------ |
capopolito | 0:a537ef2c204b | 22 | PinName const mosi = PTD2; //mosi SPI1_mosi |
capopolito | 0:a537ef2c204b | 23 | PinName const miso = PTD3; //miso SPI1_miso |
capopolito | 0:a537ef2c204b | 24 | PinName const sck = PTD1; //sck SPI1_sck |
capopolito | 0:a537ef2c204b | 25 | PinName const pcs0 = PTD0; //pcs0 SPI1_pcs0 |
capopolito | 0:a537ef2c204b | 26 | //--RELATIVI ALLA COMUNICAZIONE SPI------ |
capopolito | 0:a537ef2c204b | 27 | |
capopolito | 0:a537ef2c204b | 28 | //instanzia e inizializza oggettto spi della classe SPI |
capopolito | 0:a537ef2c204b | 29 | SPI spi(mosi,miso,sck); |
capopolito | 0:a537ef2c204b | 30 | DigitalOut slave_select(pcs0,1); //inizializza slave-select |
capopolito | 0:a537ef2c204b | 31 | //------------------------------------------------------- |
capopolito | 0:a537ef2c204b | 32 | |
capopolito | 0:a537ef2c204b | 33 | |
capopolito | 0:a537ef2c204b | 34 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
capopolito | 0:a537ef2c204b | 35 | |
capopolito | 0:a537ef2c204b | 36 | int main(void) |
capopolito | 0:a537ef2c204b | 37 | { |
capopolito | 0:a537ef2c204b | 38 | |
capopolito | 0:a537ef2c204b | 39 | //--setting delle impostazioni del SPI in base alle specifiche------------------ |
capopolito | 0:a537ef2c204b | 40 | int bits = 8; |
capopolito | 0:a537ef2c204b | 41 | int mode = 1; |
capopolito | 0:a537ef2c204b | 42 | spi.format(bits,mode);//definisce formato spi con 16 bit e pol=0 e pha=1 |
capopolito | 0:a537ef2c204b | 43 | //di default la frequenza è 1MHz |
capopolito | 0:a537ef2c204b | 44 | char command_wr=0x80; //comando per la scrittura (10000DDD), di default nella locazione DDD=000 |
capopolito | 0:a537ef2c204b | 45 | //int command_rd=0; //comando per la lettura (00000DDD), dib default nella locazione DDD=000 |
capopolito | 0:a537ef2c204b | 46 | //non utilizzato ! |
capopolito | 0:a537ef2c204b | 47 | //--setting delle impostazioni della SPI come da specifiche------------------------ |
capopolito | 0:a537ef2c204b | 48 | |
capopolito | 0:a537ef2c204b | 49 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
capopolito | 0:a537ef2c204b | 50 | PwmOut rled(LED1); |
capopolito | 0:a537ef2c204b | 51 | PwmOut gled(LED2); |
capopolito | 0:a537ef2c204b | 52 | PwmOut bled(LED3); |
capopolito | 0:a537ef2c204b | 53 | |
capopolito | 0:a537ef2c204b | 54 | printf("MMA8451 ID: %d\n", acc.getWhoAmI()); |
capopolito | 0:a537ef2c204b | 55 | |
capopolito | 0:a537ef2c204b | 56 | float x_axis_norm, y_axis_norm, z_axis_norm; |
capopolito | 0:a537ef2c204b | 57 | int x_tens, x_unit, y_tens, y_unit, z_tens, z_unit; |
capopolito | 0:a537ef2c204b | 58 | char x_tens_ascii, x_unit_ascii, y_tens_ascii, y_unit_ascii, z_tens_ascii, z_unit_ascii; |
capopolito | 0:a537ef2c204b | 59 | char command_location; |
capopolito | 0:a537ef2c204b | 60 | while (true) { |
capopolito | 0:a537ef2c204b | 61 | float x_axis, y_axis, z_axis; |
capopolito | 0:a537ef2c204b | 62 | x_axis = abs(acc.getAccX()); |
capopolito | 0:a537ef2c204b | 63 | y_axis = abs(acc.getAccY()); |
capopolito | 0:a537ef2c204b | 64 | z_axis = abs(acc.getAccZ()); |
capopolito | 0:a537ef2c204b | 65 | rled = 1.0f - x_axis; |
capopolito | 0:a537ef2c204b | 66 | gled = 1.0f - y_axis; |
capopolito | 0:a537ef2c204b | 67 | bled = 1.0f - z_axis; |
capopolito | 0:a537ef2c204b | 68 | wait(0.1f); |
capopolito | 0:a537ef2c204b | 69 | printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x_axis, y_axis, z_axis); |
capopolito | 0:a537ef2c204b | 70 | |
capopolito | 0:a537ef2c204b | 71 | |
capopolito | 0:a537ef2c204b | 72 | //SCRIVO DATI SU DISPLAY A SETTE SEGMENTI DELLA SCHEDA DE2 MEDIANTE SPI |
capopolito | 0:a537ef2c204b | 73 | //accelerazione sull'asse x |
capopolito | 0:a537ef2c204b | 74 | x_axis_norm=x_axis*100; // normalizzo tra [0 99] |
capopolito | 0:a537ef2c204b | 75 | x_tens = (int(x_axis_norm/10)); // ottengo le decine |
capopolito | 0:a537ef2c204b | 76 | x_unit = (x_axis_norm-10*x_tens); // ottengo le unità |
capopolito | 0:a537ef2c204b | 77 | x_tens_ascii = ( '0' + (x_tens) ); // ottengo le decine in ASCII |
capopolito | 0:a537ef2c204b | 78 | x_unit_ascii = ( '0' + (x_unit) ); // ottengo le unità in ASCII |
capopolito | 0:a537ef2c204b | 79 | //accelerazione sull'asse y |
capopolito | 0:a537ef2c204b | 80 | y_axis_norm=y_axis*100; // normalizzo tra [0 99] |
capopolito | 0:a537ef2c204b | 81 | y_tens = (int(y_axis_norm/10)); // ottengo le decine |
capopolito | 0:a537ef2c204b | 82 | y_unit = (y_axis_norm-10*y_tens); // ottengo le unità |
capopolito | 0:a537ef2c204b | 83 | y_tens_ascii = ( '0' + (y_tens) ); // ottengo le decine in ASCII |
capopolito | 0:a537ef2c204b | 84 | y_unit_ascii = ( '0' + (y_unit) ); // ottengo le unità in ASCII |
capopolito | 0:a537ef2c204b | 85 | //accelerazione sull'asse z |
capopolito | 0:a537ef2c204b | 86 | z_axis_norm=z_axis*100; // normalizzo tra [0 99] |
capopolito | 0:a537ef2c204b | 87 | z_tens = (int(z_axis_norm/10)); // ottengo le decine |
capopolito | 0:a537ef2c204b | 88 | z_unit = (z_axis_norm-10*z_tens); // ottengo le unità |
capopolito | 0:a537ef2c204b | 89 | z_tens_ascii = ( '0' + (z_tens) ); // ottengo le decine in ASCII |
capopolito | 0:a537ef2c204b | 90 | z_unit_ascii = ( '0' + (z_unit) ); // ottengo le unità in ASCII |
capopolito | 0:a537ef2c204b | 91 | |
capopolito | 0:a537ef2c204b | 92 | //stampo nella seriale componente x,y,z dell'accelereazione normailzzate tra 0 e 99 |
capopolito | 0:a537ef2c204b | 93 | printf("ax_norm: %1.2f, ay_norm: %1.2f, az_norm: %1.2f\n", x_axis_norm, y_axis_norm, z_axis_norm); |
capopolito | 0:a537ef2c204b | 94 | //stampo nella seriale le decine delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
capopolito | 0:a537ef2c204b | 95 | printf("ax_tens: %1.2d, ay_tens: %1.2d, az_tens: %1.2d\n", x_tens, y_tens, z_tens); |
capopolito | 0:a537ef2c204b | 96 | //stampo nella seriale le unità delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
capopolito | 0:a537ef2c204b | 97 | printf("ax_unit: %1.2d, ay_unit: %1.2d, az_unit: %1.2d\n", x_unit, y_unit, z_unit); |
capopolito | 0:a537ef2c204b | 98 | //stampo nella seriale le decine in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
capopolito | 0:a537ef2c204b | 99 | 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 | 0:a537ef2c204b | 100 | //stampo nella seriale le unità in ascii delle componenti x,y,z dell'accelereazione normailzzate tra 0 e 99 |
capopolito | 0:a537ef2c204b | 101 | 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 | 0:a537ef2c204b | 102 | |
capopolito | 0:a537ef2c204b | 103 | //scrivo nei display i valori dell'accelerazione |
capopolito | 0:a537ef2c204b | 104 | |
capopolito | 0:a537ef2c204b | 105 | //componente x dell'accelarazione |
capopolito | 0:a537ef2c204b | 106 | //scrivo codice ascii delle decine nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 107 | //command_location = ( command_wr | loc_x_tens ) ; //1000 000 = 0x80 |
capopolito | 0:a537ef2c204b | 108 | command_location = 0x80; |
capopolito | 0:a537ef2c204b | 109 | slave_select.write(0); |
capopolito | 0:a537ef2c204b | 110 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 111 | spi.write(x_tens_ascii); |
capopolito | 0:a537ef2c204b | 112 | slave_select.write(1); |
capopolito | 0:a537ef2c204b | 113 | //scrivo codice ascii delle unità nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 114 | //command_location = ( command_wr | loc_x_unit ) ; //1000 001 = 0x81 |
capopolito | 0:a537ef2c204b | 115 | command_location = 0x81; |
capopolito | 0:a537ef2c204b | 116 | slave_select.write(0); |
capopolito | 0:a537ef2c204b | 117 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 118 | spi.write(x_unit_ascii); |
capopolito | 0:a537ef2c204b | 119 | slave_select.write(1); |
capopolito | 0:a537ef2c204b | 120 | |
capopolito | 0:a537ef2c204b | 121 | //componente y dell'accelarazione |
capopolito | 0:a537ef2c204b | 122 | //scrivo codice ascii delle decine nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 123 | //command_location = ( command_wr | loc_y_tens ); //1000 010 = 0x82 |
capopolito | 0:a537ef2c204b | 124 | command_location = 0x82; |
capopolito | 0:a537ef2c204b | 125 | slave_select.write(0); //asserisco lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 126 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 127 | spi.write(y_tens_ascii); |
capopolito | 0:a537ef2c204b | 128 | slave_select.write(1); //nego lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 129 | //scrivo codice ascii delle unità nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 130 | //command_location = ( command_wr | loc_y_unit ); //1000 011 = 0x83 |
capopolito | 0:a537ef2c204b | 131 | command_location = 0x83; |
capopolito | 0:a537ef2c204b | 132 | slave_select.write(0); //asserisco lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 133 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 134 | spi.write(y_unit_ascii); |
capopolito | 0:a537ef2c204b | 135 | slave_select.write(1); //nego lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 136 | |
capopolito | 0:a537ef2c204b | 137 | //componente z dell'accelarazione |
capopolito | 0:a537ef2c204b | 138 | //scrivo codice ascii delle decine nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 139 | //command_location = ( command_wr | loc_z_tens ); //1000 100 = 0x84 |
capopolito | 0:a537ef2c204b | 140 | command_location = 0x84; |
capopolito | 0:a537ef2c204b | 141 | slave_select.write(0); //asserisco lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 142 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 143 | spi.write(z_tens_ascii); |
capopolito | 0:a537ef2c204b | 144 | slave_select.write(1); //nego lo slave select attivo basso |
capopolito | 0:a537ef2c204b | 145 | //scrivo codice ascii delle unità nel display nel display dedicato |
capopolito | 0:a537ef2c204b | 146 | //command_location = ( command_wr | loc_z_unit ); //1000 101 = 0x85 |
capopolito | 0:a537ef2c204b | 147 | command_location = 0x85; |
capopolito | 0:a537ef2c204b | 148 | slave_select.write(0); |
capopolito | 0:a537ef2c204b | 149 | spi.write(command_location); |
capopolito | 0:a537ef2c204b | 150 | spi.write(z_unit_ascii); |
capopolito | 0:a537ef2c204b | 151 | slave_select.write(1); |
capopolito | 0:a537ef2c204b | 152 | |
capopolito | 0:a537ef2c204b | 153 | } |
capopolito | 0:a537ef2c204b | 154 | } |