Dependencies:   MMA8451Q mbed

Committer:
capopolito
Date:
Tue Jan 20 23:32:40 2015 +0000
Revision:
0:a537ef2c204b

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }