Program for FRDM-64k for read five accelerometers

Dependencies:   FXOS8700CQ LSM303D MMA8451Q MPU6050 mbed

Fork of fxos8700cq_example by Thomas Murphy

Committer:
vinajarr
Date:
Thu Dec 01 08:28:52 2016 +0000
Revision:
1:a7e3df03721c
Parent:
0:6c6060a8a2f6
Child:
2:237bd73c27e9
program form measure by FRDM 64K five accelerometers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trm 0:6c6060a8a2f6 1 #include "mbed.h"
vinajarr 1:a7e3df03721c 2
trm 0:6c6060a8a2f6 3 #include "FXOS8700CQ.h"
vinajarr 1:a7e3df03721c 4 #include "MMA8451Q.h"
vinajarr 1:a7e3df03721c 5 #include "LSM303D.h"
vinajarr 1:a7e3df03721c 6 #include "MPU6050.h"
vinajarr 1:a7e3df03721c 7 #include "ADXL335.h"
vinajarr 1:a7e3df03721c 8
vinajarr 1:a7e3df03721c 9 #define SDA PTE25
vinajarr 1:a7e3df03721c 10 #define SCL PTE24
vinajarr 1:a7e3df03721c 11
vinajarr 1:a7e3df03721c 12 #define MMA8451_I2C_ADDRESS (0x1c<<1)
vinajarr 1:a7e3df03721c 13
trm 0:6c6060a8a2f6 14
trm 0:6c6060a8a2f6 15 #define DATA_RECORD_TIME_MS 1000
trm 0:6c6060a8a2f6 16
trm 0:6c6060a8a2f6 17 Serial pc(USBTX, USBRX); // Primary output to demonstrate library
trm 0:6c6060a8a2f6 18
vinajarr 1:a7e3df03721c 19
vinajarr 1:a7e3df03721c 20 //objetos de los acelerometros
vinajarr 1:a7e3df03721c 21 FXOS8700CQ fxos(SDA, SCL, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1)
vinajarr 1:a7e3df03721c 22 MMA8451Q mma(SDA, SCL, MMA8451_I2C_ADDRESS);
vinajarr 1:a7e3df03721c 23 LSM303D lsm(SDA, SCL);
vinajarr 1:a7e3df03721c 24 ADXL335 adx(PTB2,PTB3,PTB10);
vinajarr 1:a7e3df03721c 25 MPU6050 mpu(SDA, SCL);
vinajarr 1:a7e3df03721c 26
trm 0:6c6060a8a2f6 27
trm 0:6c6060a8a2f6 28 DigitalOut green(LED_GREEN); // waiting light
trm 0:6c6060a8a2f6 29 DigitalOut blue(LED_BLUE); // collection-in-progress light
trm 0:6c6060a8a2f6 30 DigitalOut red(LED_RED); // completed/error ligt
trm 0:6c6060a8a2f6 31
trm 0:6c6060a8a2f6 32 Timer t; // Microsecond timer, 32 bit int, maximum count of ~30 minutes
vinajarr 1:a7e3df03721c 33 InterruptIn int_sw2(PTC6); // unused, common with SW2 on FRDM-K64F
trm 0:6c6060a8a2f6 34 InterruptIn fxos_int2(PTC13); // should just be the Data-Ready interrupt
vinajarr 1:a7e3df03721c 35 InterruptIn int_sw3(PTA4); // switch SW3
trm 0:6c6060a8a2f6 36
trm 0:6c6060a8a2f6 37 // Interrupt status flags and data
vinajarr 1:a7e3df03721c 38
trm 0:6c6060a8a2f6 39 bool fxos_int2_triggered = false;
vinajarr 1:a7e3df03721c 40 uint32_t us_ellapsed = 0, beforePrint = 0;
vinajarr 1:a7e3df03721c 41 bool sw2_push = false;
vinajarr 1:a7e3df03721c 42 bool sw3_push = false;
trm 0:6c6060a8a2f6 43
trm 0:6c6060a8a2f6 44 // Storage for the data from the sensor
vinajarr 1:a7e3df03721c 45 SRAWDATA acc[5];
trm 0:6c6060a8a2f6 46
vinajarr 1:a7e3df03721c 47
trm 0:6c6060a8a2f6 48
trm 0:6c6060a8a2f6 49 void trigger_fxos_int2(void)
trm 0:6c6060a8a2f6 50 {
trm 0:6c6060a8a2f6 51 fxos_int2_triggered = true;
trm 0:6c6060a8a2f6 52 us_ellapsed = t.read_us();
trm 0:6c6060a8a2f6 53 }
trm 0:6c6060a8a2f6 54
vinajarr 1:a7e3df03721c 55 void interruptSW3(void)
trm 0:6c6060a8a2f6 56 {
vinajarr 1:a7e3df03721c 57 sw3_push=true;
vinajarr 1:a7e3df03721c 58
trm 0:6c6060a8a2f6 59 }
trm 0:6c6060a8a2f6 60
vinajarr 1:a7e3df03721c 61 void print_cabecera(){
vinajarr 1:a7e3df03721c 62 pc.printf("T\t");
vinajarr 1:a7e3df03721c 63 for(int i=0;i<5;i++){
vinajarr 1:a7e3df03721c 64 pc.printf("X%d\tY%d\tZ%d\t",i,i,i);
vinajarr 1:a7e3df03721c 65 }
vinajarr 1:a7e3df03721c 66 pc.printf("\r\n");
vinajarr 1:a7e3df03721c 67 }
vinajarr 1:a7e3df03721c 68
vinajarr 1:a7e3df03721c 69 void print_data(){
vinajarr 1:a7e3df03721c 70
vinajarr 1:a7e3df03721c 71 us_ellapsed= t.read_us()-beforePrint;
vinajarr 1:a7e3df03721c 72 pc.printf("%d\t",us_ellapsed);
vinajarr 1:a7e3df03721c 73 for(int i=0;i<5;i++){
vinajarr 1:a7e3df03721c 74 pc.printf("%+.4f\t%+.4f\t%+.4f\t", acc[i].x, acc[i].y, acc[i].z);
vinajarr 1:a7e3df03721c 75 }
vinajarr 1:a7e3df03721c 76 pc.printf("\r\n");
vinajarr 1:a7e3df03721c 77 beforePrint=t.read_us();
vinajarr 1:a7e3df03721c 78
vinajarr 1:a7e3df03721c 79 }
vinajarr 1:a7e3df03721c 80
trm 0:6c6060a8a2f6 81 void print_reading()
trm 0:6c6060a8a2f6 82 {
vinajarr 1:a7e3df03721c 83 us_ellapsed= t.read_us()-beforePrint;
vinajarr 1:a7e3df03721c 84 pc.printf("%d ",us_ellapsed);
vinajarr 1:a7e3df03721c 85 for(int i=0;i<5;i++){
vinajarr 1:a7e3df03721c 86
vinajarr 1:a7e3df03721c 87 pc.printf("A[%d] X:%+.4f,Y:%+.4f,Z:%+.4f\t",
vinajarr 1:a7e3df03721c 88 i,
vinajarr 1:a7e3df03721c 89 acc[i].x, acc[i].y, acc[i].z
vinajarr 1:a7e3df03721c 90 );
vinajarr 1:a7e3df03721c 91 }
vinajarr 1:a7e3df03721c 92 pc.printf("\r\n");
vinajarr 1:a7e3df03721c 93 beforePrint=t.read_us();
vinajarr 1:a7e3df03721c 94 }
vinajarr 1:a7e3df03721c 95
vinajarr 1:a7e3df03721c 96 void readAcc()
vinajarr 1:a7e3df03721c 97 {
vinajarr 1:a7e3df03721c 98
vinajarr 1:a7e3df03721c 99 //acelerometro 0
vinajarr 1:a7e3df03721c 100 while(!fxos_int2_triggered && fxos_int2.read()==1){}
vinajarr 1:a7e3df03721c 101 fxos_int2_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 102 fxos.get_dataAcc(&acc[0]); // clear interrupt from device
vinajarr 1:a7e3df03721c 103
vinajarr 1:a7e3df03721c 104 //acelerometro 1
vinajarr 1:a7e3df03721c 105 acc[1].x=mma.getAccX();
vinajarr 1:a7e3df03721c 106 acc[1].y=mma.getAccY();
vinajarr 1:a7e3df03721c 107 acc[1].z=mma.getAccZ();
vinajarr 1:a7e3df03721c 108
vinajarr 1:a7e3df03721c 109 //acelerometro 2
vinajarr 1:a7e3df03721c 110 float xyz[3];
vinajarr 1:a7e3df03721c 111 mpu.getAccelero( xyz );
vinajarr 1:a7e3df03721c 112 acc[2].x = xyz[0];
vinajarr 1:a7e3df03721c 113 acc[2].y = xyz[1];
vinajarr 1:a7e3df03721c 114 acc[2].z = xyz[2];
vinajarr 1:a7e3df03721c 115
vinajarr 1:a7e3df03721c 116 //acelerometro 3
vinajarr 1:a7e3df03721c 117 lsm.readA(&acc[3].x,&acc[3].y,&acc[3].z);
vinajarr 1:a7e3df03721c 118
vinajarr 1:a7e3df03721c 119 //acclerometro 4
vinajarr 1:a7e3df03721c 120 adx.getAcc(acc[4]);
vinajarr 1:a7e3df03721c 121
vinajarr 1:a7e3df03721c 122 }
vinajarr 1:a7e3df03721c 123
vinajarr 1:a7e3df03721c 124 void initFxox(){
vinajarr 1:a7e3df03721c 125 SRAWDATA accel_data;
vinajarr 1:a7e3df03721c 126 // Diagnostic printing of the FXOS WHOAMI register value
vinajarr 1:a7e3df03721c 127 pc.printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", fxos.get_whoami());
vinajarr 1:a7e3df03721c 128 fxos.enable();
vinajarr 1:a7e3df03721c 129 fxos.get_dataAcc(&accel_data);
vinajarr 1:a7e3df03721c 130 while(!fxos_int2_triggered && fxos_int2.read()==1){}
vinajarr 1:a7e3df03721c 131 fxos_int2_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 132 fxos.get_dataAcc(&accel_data); // clear interrupt from device
vinajarr 1:a7e3df03721c 133 pc.printf(" A[0] X:%+.4f,Y:%+.4f,Z:%+.4f\n\r",
vinajarr 1:a7e3df03721c 134 accel_data.x, accel_data.y, accel_data.z
vinajarr 1:a7e3df03721c 135 );
vinajarr 1:a7e3df03721c 136 }
vinajarr 1:a7e3df03721c 137
vinajarr 1:a7e3df03721c 138 void initMma(){
vinajarr 1:a7e3df03721c 139 printf("MMA8451 ID: %d\n", mma.getWhoAmI());
vinajarr 1:a7e3df03721c 140 pc.printf(" A[1] X:%+.4f,Y:%+.4f,Z:%+.4f\n\r",
vinajarr 1:a7e3df03721c 141 mma.getAccX(), mma.getAccX(), mma.getAccX()
vinajarr 1:a7e3df03721c 142 );
vinajarr 1:a7e3df03721c 143 }
vinajarr 1:a7e3df03721c 144
vinajarr 1:a7e3df03721c 145 void initMpu(){
vinajarr 1:a7e3df03721c 146 mpu.setAcceleroRange(MPU6050_ACCELERO_RANGE_2G);
vinajarr 1:a7e3df03721c 147 pc.printf("MPU6050 testConnection \n\r");
vinajarr 1:a7e3df03721c 148
vinajarr 1:a7e3df03721c 149 bool mpu6050TestResult = mpu.testConnection();
vinajarr 1:a7e3df03721c 150 if(mpu6050TestResult) {
vinajarr 1:a7e3df03721c 151 pc.printf("\r\nMPU6050 test passed\r\n");
vinajarr 1:a7e3df03721c 152 } else {
vinajarr 1:a7e3df03721c 153 pc.printf("\r\nMPU6050 test failed \n\r");
vinajarr 1:a7e3df03721c 154 }
vinajarr 1:a7e3df03721c 155 float acc[3];
vinajarr 1:a7e3df03721c 156
vinajarr 1:a7e3df03721c 157 pc.printf(" A[2] temp:%+.4f",
vinajarr 1:a7e3df03721c 158 mpu.getTemp()
vinajarr 1:a7e3df03721c 159 );
vinajarr 1:a7e3df03721c 160 mpu.getAccelero( acc );
vinajarr 1:a7e3df03721c 161 pc.printf(" X:%+.4f,Y:%+.4f,Z:%+.4f\r\n",
vinajarr 1:a7e3df03721c 162 acc[2], acc[1],acc[2]
vinajarr 1:a7e3df03721c 163 );
vinajarr 1:a7e3df03721c 164 }
vinajarr 1:a7e3df03721c 165
vinajarr 1:a7e3df03721c 166 void initLsm(){
vinajarr 1:a7e3df03721c 167 double acc[3];
vinajarr 1:a7e3df03721c 168 if (lsm.readA(&acc[0],&acc[1],&acc[2])){
vinajarr 1:a7e3df03721c 169 pc.printf(" A[3] X:%+.4f,Y:%+.4f,Z:%+.4f\r\n",
vinajarr 1:a7e3df03721c 170 acc[2], acc[1],acc[2]
vinajarr 1:a7e3df03721c 171 );
vinajarr 1:a7e3df03721c 172 }
vinajarr 1:a7e3df03721c 173 else{
vinajarr 1:a7e3df03721c 174 pc.printf(" LSM303D don't work ");
vinajarr 1:a7e3df03721c 175 }
trm 0:6c6060a8a2f6 176 }
trm 0:6c6060a8a2f6 177
trm 0:6c6060a8a2f6 178 int main(void)
trm 0:6c6060a8a2f6 179 {
vinajarr 1:a7e3df03721c 180
vinajarr 1:a7e3df03721c 181 //inicializacion basico
trm 0:6c6060a8a2f6 182 t.reset();
vinajarr 1:a7e3df03721c 183 pc.baud(115200); //probar con 460800 // Print quickly! 200Hz x line of output data!
vinajarr 1:a7e3df03721c 184 fxos_int2.fall(&trigger_fxos_int2);
vinajarr 1:a7e3df03721c 185
vinajarr 1:a7e3df03721c 186 int_sw3.mode(PullUp);
vinajarr 1:a7e3df03721c 187 int_sw3.fall(&interruptSW3);
vinajarr 1:a7e3df03721c 188
vinajarr 1:a7e3df03721c 189
trm 0:6c6060a8a2f6 190 // Lights off (FRDM-K64F has active-low LEDs)
trm 0:6c6060a8a2f6 191 green.write(1);
trm 0:6c6060a8a2f6 192 red.write(1);
trm 0:6c6060a8a2f6 193 blue.write(1);
vinajarr 1:a7e3df03721c 194
vinajarr 1:a7e3df03721c 195 //inicializacion Acelerometros
vinajarr 1:a7e3df03721c 196 initFxox();
vinajarr 1:a7e3df03721c 197 initMma();
vinajarr 1:a7e3df03721c 198 initMpu();
vinajarr 1:a7e3df03721c 199 initLsm();
vinajarr 1:a7e3df03721c 200
vinajarr 1:a7e3df03721c 201 readAcc();
trm 0:6c6060a8a2f6 202 print_reading();
vinajarr 1:a7e3df03721c 203
vinajarr 1:a7e3df03721c 204 //esperar a pulsador
vinajarr 1:a7e3df03721c 205 while(!sw3_push){
vinajarr 1:a7e3df03721c 206 wait_ms(50);
trm 0:6c6060a8a2f6 207 }
vinajarr 1:a7e3df03721c 208
vinajarr 1:a7e3df03721c 209 pc.printf("Iniciando lectura de acelerometros\r\n");
vinajarr 1:a7e3df03721c 210
vinajarr 1:a7e3df03721c 211 //lectura de todos los accelerometros
vinajarr 1:a7e3df03721c 212 t.start();
vinajarr 1:a7e3df03721c 213 print_cabecera();
vinajarr 1:a7e3df03721c 214 while(1){
vinajarr 1:a7e3df03721c 215 readAcc();
vinajarr 1:a7e3df03721c 216 print_data();
trm 0:6c6060a8a2f6 217 }
vinajarr 1:a7e3df03721c 218 }
trm 0:6c6060a8a2f6 219
trm 0:6c6060a8a2f6 220
trm 0:6c6060a8a2f6 221