Program for FRDM-64k for read five accelerometers

Dependencies:   FXOS8700CQ LSM303D MMA8451Q MPU6050 mbed

Fork of fxos8700cq_example by Thomas Murphy

Committer:
vinajarr
Date:
Mon Dec 05 09:16:43 2016 +0000
Revision:
2:237bd73c27e9
Parent:
1:a7e3df03721c
Child:
4:c6b4d8c152cd
Uso de acelerometros a maxima velocidad

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