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 Jan 18 07:58:01 2018 +0000
Revision:
4:c6b4d8c152cd
Parent:
2:237bd73c27e9
Program can read 5 accelerometer 400Hz at same time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trm 0:6c6060a8a2f6 1 #include "mbed.h"
vinajarr 4:c6b4d8c152cd 2 #include "SDFileSystem.h"
vinajarr 4:c6b4d8c152cd 3 Serial pc(USBTX, USBRX); // Primary output to demonstrate library
vinajarr 4:c6b4d8c152cd 4
vinajarr 4:c6b4d8c152cd 5 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
vinajarr 4:c6b4d8c152cd 6 FILE *fp;
vinajarr 1:a7e3df03721c 7
trm 0:6c6060a8a2f6 8 #include "FXOS8700CQ.h"
vinajarr 1:a7e3df03721c 9 #include "MMA8451Q.h"
vinajarr 1:a7e3df03721c 10 #include "LSM303D.h"
vinajarr 1:a7e3df03721c 11 #include "MPU6050.h"
vinajarr 1:a7e3df03721c 12 #include "ADXL335.h"
vinajarr 1:a7e3df03721c 13
vinajarr 1:a7e3df03721c 14 #define SDA PTE25
vinajarr 1:a7e3df03721c 15 #define SCL PTE24
vinajarr 1:a7e3df03721c 16
vinajarr 1:a7e3df03721c 17 #define MMA8451_I2C_ADDRESS (0x1c<<1)
vinajarr 1:a7e3df03721c 18
trm 0:6c6060a8a2f6 19
trm 0:6c6060a8a2f6 20 #define DATA_RECORD_TIME_MS 1000
vinajarr 4:c6b4d8c152cd 21 uint32_t do_list(const char *fsrc);
trm 0:6c6060a8a2f6 22
vinajarr 4:c6b4d8c152cd 23 I2C i2c(SDA, SCL);
vinajarr 1:a7e3df03721c 24
vinajarr 1:a7e3df03721c 25 //objetos de los acelerometros
vinajarr 4:c6b4d8c152cd 26 MMA8451Q mma(&i2c, MMA8451_I2C_ADDRESS);
vinajarr 4:c6b4d8c152cd 27 LSM303D lsm(&i2c);
vinajarr 1:a7e3df03721c 28 ADXL335 adx(PTB2,PTB3,PTB10);
vinajarr 4:c6b4d8c152cd 29 MPU6050 mpu(&i2c);
vinajarr 4:c6b4d8c152cd 30 FXOS8700CQ fxos(&i2c, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1)
trm 0:6c6060a8a2f6 31
trm 0:6c6060a8a2f6 32 DigitalOut green(LED_GREEN); // waiting light
trm 0:6c6060a8a2f6 33 DigitalOut blue(LED_BLUE); // collection-in-progress light
trm 0:6c6060a8a2f6 34 DigitalOut red(LED_RED); // completed/error ligt
trm 0:6c6060a8a2f6 35
trm 0:6c6060a8a2f6 36 Timer t; // Microsecond timer, 32 bit int, maximum count of ~30 minutes
trm 0:6c6060a8a2f6 37 InterruptIn fxos_int2(PTC13); // should just be the Data-Ready interrupt
vinajarr 4:c6b4d8c152cd 38 InterruptIn sw3_int(PTA4); // switch SW3
vinajarr 4:c6b4d8c152cd 39 InterruptIn sw2_int(PTC6); // switch SW2
vinajarr 4:c6b4d8c152cd 40 InterruptIn mpu_int(PTC3);// should just be the Data-Ready interrupt
vinajarr 4:c6b4d8c152cd 41 InterruptIn mma_int1(PTD1);// should just be the Data-Ready interrupt
vinajarr 4:c6b4d8c152cd 42 InterruptIn lsm_int1(PTA2); // should just be the Data-Ready interrupt
trm 0:6c6060a8a2f6 43
trm 0:6c6060a8a2f6 44 // Interrupt status flags and data
vinajarr 1:a7e3df03721c 45
trm 0:6c6060a8a2f6 46 bool fxos_int2_triggered = false;
vinajarr 4:c6b4d8c152cd 47 bool mpu_int_triggered = false;
vinajarr 4:c6b4d8c152cd 48 bool mma_int1_triggered = false;
vinajarr 4:c6b4d8c152cd 49 bool lsm_int1_triggered = false;
vinajarr 1:a7e3df03721c 50 uint32_t us_ellapsed = 0, beforePrint = 0;
vinajarr 1:a7e3df03721c 51 bool sw2_push = false;
vinajarr 1:a7e3df03721c 52 bool sw3_push = false;
trm 0:6c6060a8a2f6 53
trm 0:6c6060a8a2f6 54 // Storage for the data from the sensor
vinajarr 1:a7e3df03721c 55 SRAWDATA acc[5];
trm 0:6c6060a8a2f6 56
vinajarr 1:a7e3df03721c 57
trm 0:6c6060a8a2f6 58
vinajarr 4:c6b4d8c152cd 59 volatile SRAWDATA ac;
vinajarr 4:c6b4d8c152cd 60 const uint16_t size = 400;
vinajarr 4:c6b4d8c152cd 61 volatile float accT[size][2];
vinajarr 4:c6b4d8c152cd 62 volatile uint32_t tiempo[size][2];
vinajarr 4:c6b4d8c152cd 63 volatile uint32_t puntero[2] = {0,0};
vinajarr 4:c6b4d8c152cd 64 bool escribirSD = false;
vinajarr 4:c6b4d8c152cd 65
vinajarr 4:c6b4d8c152cd 66 void fxos_int2_interrupt(void)
trm 0:6c6060a8a2f6 67 {
trm 0:6c6060a8a2f6 68 fxos_int2_triggered = true;
vinajarr 4:c6b4d8c152cd 69 //fxos.get_dataAcc(&acc[0]);
vinajarr 4:c6b4d8c152cd 70 }
vinajarr 4:c6b4d8c152cd 71
vinajarr 4:c6b4d8c152cd 72 void mpu_int_interrupt (void)
vinajarr 4:c6b4d8c152cd 73 {
vinajarr 4:c6b4d8c152cd 74 mpu_int_triggered = true;
trm 0:6c6060a8a2f6 75 }
trm 0:6c6060a8a2f6 76
vinajarr 4:c6b4d8c152cd 77 void mma_int1_interrupt (void)
vinajarr 4:c6b4d8c152cd 78 {
vinajarr 4:c6b4d8c152cd 79 mma_int1_triggered = true;
vinajarr 4:c6b4d8c152cd 80
vinajarr 4:c6b4d8c152cd 81 ac.x=mma.getAccX();
vinajarr 4:c6b4d8c152cd 82 ac.y=mma.getAccY();
vinajarr 4:c6b4d8c152cd 83 ac.z=mma.getAccZ();
vinajarr 4:c6b4d8c152cd 84
vinajarr 4:c6b4d8c152cd 85 accT[puntero[0]][puntero[1]]=sqrt(ac.x*ac.x+ac.y*ac.y+ac.z*ac.z);
vinajarr 4:c6b4d8c152cd 86 tiempo[puntero[0]][puntero[1]]=t.read_us();
vinajarr 4:c6b4d8c152cd 87 puntero[0]++;
vinajarr 4:c6b4d8c152cd 88 if(puntero[0]>(size-1)){
vinajarr 4:c6b4d8c152cd 89 puntero[0]=0;
vinajarr 4:c6b4d8c152cd 90 puntero[1] = (puntero[1] + 1) % 2;
vinajarr 4:c6b4d8c152cd 91 escribirSD=true;
vinajarr 4:c6b4d8c152cd 92 }
vinajarr 4:c6b4d8c152cd 93 }
vinajarr 4:c6b4d8c152cd 94
vinajarr 4:c6b4d8c152cd 95 void lsm_int1_interrupt (void)
vinajarr 4:c6b4d8c152cd 96 {
vinajarr 4:c6b4d8c152cd 97 lsm_int1_triggered = true;
vinajarr 4:c6b4d8c152cd 98 }
vinajarr 4:c6b4d8c152cd 99
vinajarr 4:c6b4d8c152cd 100 void SW3_interrupt(void)
trm 0:6c6060a8a2f6 101 {
vinajarr 1:a7e3df03721c 102 sw3_push=true;
trm 0:6c6060a8a2f6 103 }
trm 0:6c6060a8a2f6 104
vinajarr 1:a7e3df03721c 105 void print_cabecera(){
vinajarr 1:a7e3df03721c 106 pc.printf("T\t");
vinajarr 4:c6b4d8c152cd 107 pc.printf("Va\t\t");
vinajarr 4:c6b4d8c152cd 108 /*for(int i=1;i<5;i++){
vinajarr 4:c6b4d8c152cd 109 pc.printf("Z%d\t\t",i);
vinajarr 4:c6b4d8c152cd 110 }*/
vinajarr 1:a7e3df03721c 111 pc.printf("\r\n");
vinajarr 4:c6b4d8c152cd 112 }
vinajarr 1:a7e3df03721c 113
vinajarr 1:a7e3df03721c 114 void print_data(){
vinajarr 2:237bd73c27e9 115 //us_ellapsed= t.read_us()-beforePrint;
vinajarr 2:237bd73c27e9 116 pc.printf("%d\t",t.read_us());
vinajarr 4:c6b4d8c152cd 117 pc.printf("%.5f\t", accT);
vinajarr 4:c6b4d8c152cd 118 /*for(int i=0;i<5;i++){
vinajarr 4:c6b4d8c152cd 119 if(i!=7){
vinajarr 4:c6b4d8c152cd 120 pc.printf("%+.3f\t", acc[i].z);
vinajarr 2:237bd73c27e9 121 // pc.printf("%+.4f\t%+.4f\t%+.4f\t", acc[i].x, acc[i].y, acc[i].z);
vinajarr 4:c6b4d8c152cd 122 }
vinajarr 4:c6b4d8c152cd 123 }*/
vinajarr 1:a7e3df03721c 124 pc.printf("\r\n");
vinajarr 2:237bd73c27e9 125 //beforePrint=t.read_us();
vinajarr 1:a7e3df03721c 126 }
vinajarr 1:a7e3df03721c 127
trm 0:6c6060a8a2f6 128 void print_reading()
trm 0:6c6060a8a2f6 129 {
vinajarr 1:a7e3df03721c 130 us_ellapsed= t.read_us()-beforePrint;
vinajarr 4:c6b4d8c152cd 131 beforePrint=t.read_us();
vinajarr 1:a7e3df03721c 132 pc.printf("%d ",us_ellapsed);
vinajarr 4:c6b4d8c152cd 133 for(int i=1;i<5;i++){
vinajarr 4:c6b4d8c152cd 134 pc.printf("A[%d] X:%+.3f,Y:%+.3f,Z:%+.3f\t",
vinajarr 1:a7e3df03721c 135 i,
vinajarr 1:a7e3df03721c 136 acc[i].x, acc[i].y, acc[i].z
vinajarr 1:a7e3df03721c 137 );
vinajarr 1:a7e3df03721c 138 }
vinajarr 1:a7e3df03721c 139 pc.printf("\r\n");
vinajarr 1:a7e3df03721c 140 }
vinajarr 1:a7e3df03721c 141
vinajarr 1:a7e3df03721c 142 void readAcc()
vinajarr 1:a7e3df03721c 143 {
vinajarr 4:c6b4d8c152cd 144 uint64_t int_time = t.read_us();
vinajarr 1:a7e3df03721c 145
vinajarr 4:c6b4d8c152cd 146 //acelerometro 0
vinajarr 4:c6b4d8c152cd 147 /*
vinajarr 4:c6b4d8c152cd 148 while(!fxos_int2_triggered && t.read_us()-int_time < 4000 && fxos_int2.read()){wait_us(1);}
vinajarr 1:a7e3df03721c 149 fxos_int2_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 150 fxos.get_dataAcc(&acc[0]); // clear interrupt from device
vinajarr 4:c6b4d8c152cd 151
vinajarr 4:c6b4d8c152cd 152 if(t.read_us()-int_time>4000) pc.printf("Error lectura Fxos ");
vinajarr 4:c6b4d8c152cd 153 */
vinajarr 4:c6b4d8c152cd 154 int_time = t.read_us();
vinajarr 4:c6b4d8c152cd 155 while(!mma_int1_triggered && t.read_us()-int_time<4000 && mma_int1.read()){}
vinajarr 4:c6b4d8c152cd 156 mma_int1_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 157 //acelerometro 1
vinajarr 4:c6b4d8c152cd 158 /*acc[1].x=mma.getAccX();
vinajarr 1:a7e3df03721c 159 acc[1].y=mma.getAccY();
vinajarr 4:c6b4d8c152cd 160 acc[1].z=mma.getAccZ();*/
vinajarr 4:c6b4d8c152cd 161
vinajarr 4:c6b4d8c152cd 162 //accT=sqrt(ac.x*ac.x+ac.y*ac.y+ac.z*ac.z);
vinajarr 1:a7e3df03721c 163
vinajarr 4:c6b4d8c152cd 164 if(t.read_us()-int_time>4000) pc.printf("Error lectura mma \t\t");
vinajarr 4:c6b4d8c152cd 165
vinajarr 4:c6b4d8c152cd 166 /*
vinajarr 4:c6b4d8c152cd 167 int_time = t.read_us();
vinajarr 4:c6b4d8c152cd 168 while(!mpu_int_triggered && t.read_us()-int_time<4000 && mpu_int.read()){wait_us(1);}
vinajarr 4:c6b4d8c152cd 169 mpu_int_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 170 //acelerometro 2
vinajarr 1:a7e3df03721c 171 float xyz[3];
vinajarr 1:a7e3df03721c 172 mpu.getAccelero( xyz );
vinajarr 4:c6b4d8c152cd 173 mpu.read(0x3A);
vinajarr 1:a7e3df03721c 174 acc[2].x = xyz[0];
vinajarr 1:a7e3df03721c 175 acc[2].y = xyz[1];
vinajarr 1:a7e3df03721c 176 acc[2].z = xyz[2];
vinajarr 1:a7e3df03721c 177
vinajarr 4:c6b4d8c152cd 178
vinajarr 4:c6b4d8c152cd 179 if(t.read_us()-int_time>4000) pc.printf("Error lectura mpu ");
vinajarr 4:c6b4d8c152cd 180
vinajarr 4:c6b4d8c152cd 181 int_time = t.read_us();
vinajarr 4:c6b4d8c152cd 182 while(!lsm_int1_triggered && t.read_us()-int_time<4000 && !lsm_int1.read()){ wait_us(1);}
vinajarr 4:c6b4d8c152cd 183 lsm_int1_triggered = false; // un-trigger
vinajarr 1:a7e3df03721c 184 //acelerometro 3
vinajarr 1:a7e3df03721c 185 lsm.readA(&acc[3].x,&acc[3].y,&acc[3].z);
vinajarr 1:a7e3df03721c 186
vinajarr 4:c6b4d8c152cd 187 if(t.read_us()-int_time>4000) pc.printf("Error lectura lsm ");
vinajarr 4:c6b4d8c152cd 188
vinajarr 1:a7e3df03721c 189 //acclerometro 4
vinajarr 1:a7e3df03721c 190 adx.getAcc(acc[4]);
vinajarr 2:237bd73c27e9 191 */
vinajarr 1:a7e3df03721c 192 }
vinajarr 1:a7e3df03721c 193
vinajarr 1:a7e3df03721c 194 void initFxox(){
vinajarr 1:a7e3df03721c 195 // Diagnostic printing of the FXOS WHOAMI register value
vinajarr 1:a7e3df03721c 196 pc.printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", fxos.get_whoami());
vinajarr 1:a7e3df03721c 197 fxos.enable();
vinajarr 4:c6b4d8c152cd 198
vinajarr 4:c6b4d8c152cd 199 fxos_int2.mode(PullUp);
vinajarr 4:c6b4d8c152cd 200 wait_ms(20);
vinajarr 4:c6b4d8c152cd 201 fxos_int2.fall(&fxos_int2_interrupt);
vinajarr 4:c6b4d8c152cd 202
vinajarr 4:c6b4d8c152cd 203 /*for(int i=0;i<0x7A;i++){
vinajarr 4:c6b4d8c152cd 204 uint8_t data =0;
vinajarr 4:c6b4d8c152cd 205 fxos.read_regs(i,&data,1);
vinajarr 4:c6b4d8c152cd 206 pc.printf("0x%x:\t0x%x\r\n",i,data);
vinajarr 4:c6b4d8c152cd 207 }*/
vinajarr 4:c6b4d8c152cd 208
vinajarr 4:c6b4d8c152cd 209 while(fxos_int2.read()==0){
vinajarr 4:c6b4d8c152cd 210 uint8_t data =0;
vinajarr 4:c6b4d8c152cd 211 fxos.get_dataAcc(&acc[0]);
vinajarr 4:c6b4d8c152cd 212 fxos.read_regs(0x00,&data,1);
vinajarr 4:c6b4d8c152cd 213 pc.printf("0x%x:\t0x%x\r\n",0x00,data);
vinajarr 4:c6b4d8c152cd 214 }
vinajarr 4:c6b4d8c152cd 215
vinajarr 4:c6b4d8c152cd 216
vinajarr 4:c6b4d8c152cd 217
vinajarr 4:c6b4d8c152cd 218 while(!fxos_int2_triggered){ wait_ms(1); }
vinajarr 4:c6b4d8c152cd 219
vinajarr 1:a7e3df03721c 220 fxos_int2_triggered = false; // un-trigger
vinajarr 4:c6b4d8c152cd 221 fxos.get_dataAcc(&acc[0]);
vinajarr 4:c6b4d8c152cd 222 // clear interrupt from device
vinajarr 4:c6b4d8c152cd 223 pc.printf(" A[0] X:%+.4f,Y:%+.4f,Z:%+.4f\n\r",
vinajarr 4:c6b4d8c152cd 224 acc[0].x, acc[0].y, acc[0].z);
vinajarr 1:a7e3df03721c 225 }
vinajarr 1:a7e3df03721c 226
vinajarr 1:a7e3df03721c 227 void initMma(){
vinajarr 4:c6b4d8c152cd 228
vinajarr 4:c6b4d8c152cd 229 pc.printf("MMA8451 ID: %d\n", mma.getWhoAmI());
vinajarr 4:c6b4d8c152cd 230
vinajarr 4:c6b4d8c152cd 231 /*for(int i=0;i<0x32;i++){
vinajarr 4:c6b4d8c152cd 232 uint8_t data =0;
vinajarr 4:c6b4d8c152cd 233 mma.readRegs(i,&data,1);
vinajarr 4:c6b4d8c152cd 234 pc.printf("0x%x:\t0x%x\r\n",i,data);
vinajarr 4:c6b4d8c152cd 235 }*/
vinajarr 4:c6b4d8c152cd 236
vinajarr 4:c6b4d8c152cd 237 mma_int1.mode(PullUp);
vinajarr 4:c6b4d8c152cd 238 wait_ms(20);
vinajarr 4:c6b4d8c152cd 239 mma_int1.fall(&mma_int1_interrupt);
vinajarr 4:c6b4d8c152cd 240
vinajarr 4:c6b4d8c152cd 241 while(mma_int1.read()==0){
vinajarr 4:c6b4d8c152cd 242 ac.x=mma.getAccX();
vinajarr 4:c6b4d8c152cd 243 ac.y=mma.getAccY();
vinajarr 4:c6b4d8c152cd 244 ac.z=mma.getAccZ();
vinajarr 4:c6b4d8c152cd 245 }
vinajarr 4:c6b4d8c152cd 246
vinajarr 4:c6b4d8c152cd 247
vinajarr 4:c6b4d8c152cd 248
vinajarr 4:c6b4d8c152cd 249 while(!mma_int1_triggered){ wait_ms(1); }
vinajarr 4:c6b4d8c152cd 250
vinajarr 4:c6b4d8c152cd 251 mma_int1_triggered = false; // un-trigger
vinajarr 4:c6b4d8c152cd 252 pc.printf(" A[1] X:%+.4f,Y:%+.4f,Z:%+.4f\r\n",
vinajarr 4:c6b4d8c152cd 253 mma.getAccX(), mma.getAccY(), mma.getAccZ() );
vinajarr 4:c6b4d8c152cd 254
vinajarr 1:a7e3df03721c 255 }
vinajarr 1:a7e3df03721c 256
vinajarr 1:a7e3df03721c 257 void initMpu(){
vinajarr 4:c6b4d8c152cd 258 float acc[3];
vinajarr 4:c6b4d8c152cd 259
vinajarr 4:c6b4d8c152cd 260 mpu.setAcceleroRange(MPU6050_ACCELERO_RANGE_2G);
vinajarr 4:c6b4d8c152cd 261 pc.printf("MPU6050 testConnection \r\n");
vinajarr 4:c6b4d8c152cd 262
vinajarr 4:c6b4d8c152cd 263 /*for(int i=0xD;i<0x76;i++)
vinajarr 4:c6b4d8c152cd 264 {
vinajarr 4:c6b4d8c152cd 265 pc.printf("Ox%x: 0x%x\r\n",i,mpu.read(i));
vinajarr 4:c6b4d8c152cd 266 }*/
vinajarr 4:c6b4d8c152cd 267
vinajarr 4:c6b4d8c152cd 268 mpu_int.mode(PullUp);
vinajarr 4:c6b4d8c152cd 269 wait_ms(20);
vinajarr 4:c6b4d8c152cd 270 mpu_int.fall(&mpu_int_interrupt);
vinajarr 4:c6b4d8c152cd 271
vinajarr 4:c6b4d8c152cd 272 while(mpu_int.read()==0){
vinajarr 1:a7e3df03721c 273 mpu.getAccelero( acc );
vinajarr 4:c6b4d8c152cd 274 pc.printf("Ox%x: 0x%x\r\n",0x3A,mpu.read(0x3A));
vinajarr 4:c6b4d8c152cd 275 }
vinajarr 4:c6b4d8c152cd 276
vinajarr 4:c6b4d8c152cd 277 while(!mpu_int_triggered){ wait_ms(1);} //wait interrupt
vinajarr 4:c6b4d8c152cd 278 mpu_int_triggered = false; // un-trigger
vinajarr 4:c6b4d8c152cd 279
vinajarr 4:c6b4d8c152cd 280 bool mpu6050TestResult = mpu.testConnection();
vinajarr 4:c6b4d8c152cd 281 if(mpu6050TestResult) {
vinajarr 4:c6b4d8c152cd 282 pc.printf("\r\nMPU6050 test passed\r\n");
vinajarr 4:c6b4d8c152cd 283 } else {
vinajarr 4:c6b4d8c152cd 284 pc.printf("\r\nMPU6050 test failed \r\n");
vinajarr 4:c6b4d8c152cd 285 }
vinajarr 4:c6b4d8c152cd 286
vinajarr 4:c6b4d8c152cd 287 pc.printf(" A[2] temp:%+.4f", mpu.getTemp());
vinajarr 4:c6b4d8c152cd 288 mpu.getAccelero( acc );
vinajarr 4:c6b4d8c152cd 289 pc.printf(" X:%+.4f,Y:%+.4f,Z:%+.4f\r\n",acc[0], ac,acc[2]);
vinajarr 4:c6b4d8c152cd 290 pc.printf("Ox%x: 0x%x\r\n",0x3A,mpu.read(0x3A));
vinajarr 1:a7e3df03721c 291 }
vinajarr 1:a7e3df03721c 292
vinajarr 1:a7e3df03721c 293 void initLsm(){
vinajarr 1:a7e3df03721c 294 double acc[3];
vinajarr 4:c6b4d8c152cd 295 char reg_v=0;
vinajarr 4:c6b4d8c152cd 296 pc.printf("LSM303D comprobacion de configuracion: \r\n");
vinajarr 4:c6b4d8c152cd 297 for(int i=0;i<0x3E;i++)
vinajarr 4:c6b4d8c152cd 298 {
vinajarr 4:c6b4d8c152cd 299 if(lsm.read_reg(addr_acc_mag,i,&reg_v)){
vinajarr 4:c6b4d8c152cd 300 pc.printf("Ox%x: 0x%x\r\n",i,reg_v);
vinajarr 4:c6b4d8c152cd 301 }
vinajarr 4:c6b4d8c152cd 302 }
vinajarr 4:c6b4d8c152cd 303
vinajarr 4:c6b4d8c152cd 304
vinajarr 4:c6b4d8c152cd 305 lsm.readA(&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 306 lsm.readA(&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 307
vinajarr 4:c6b4d8c152cd 308 lsm.read(&acc[0],&acc[1],&acc[2],&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 309 lsm.read(&acc[0],&acc[1],&acc[2],&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 310 lsm.read(&acc[0],&acc[1],&acc[2],&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 311 lsm.read(&acc[0],&acc[1],&acc[2],&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 312
vinajarr 4:c6b4d8c152cd 313 for(int i=0;i<0x3E;i++)
vinajarr 4:c6b4d8c152cd 314 {
vinajarr 4:c6b4d8c152cd 315 if(lsm.read_reg(addr_acc_mag,i,&reg_v)){
vinajarr 4:c6b4d8c152cd 316 pc.printf("Ox%x: 0x%x\r\n",i,reg_v);
vinajarr 4:c6b4d8c152cd 317 }
vinajarr 4:c6b4d8c152cd 318 }
vinajarr 4:c6b4d8c152cd 319
vinajarr 4:c6b4d8c152cd 320 lsm_int1.mode(PullUp);
vinajarr 4:c6b4d8c152cd 321 wait_ms(20);
vinajarr 4:c6b4d8c152cd 322 lsm_int1.rise(&lsm_int1_interrupt);
vinajarr 4:c6b4d8c152cd 323
vinajarr 4:c6b4d8c152cd 324 while(lsm_int1.read()==1){
vinajarr 4:c6b4d8c152cd 325 lsm.readA(&acc[0],&acc[1],&acc[2]);
vinajarr 4:c6b4d8c152cd 326 /*if(lsm.read_reg(addr_acc_mag,0x27,&reg_v)){ //registro de status_A
vinajarr 4:c6b4d8c152cd 327 pc.printf("Ox%x: 0x%x\r\n",0x27,reg_v);
vinajarr 4:c6b4d8c152cd 328 }*/
vinajarr 4:c6b4d8c152cd 329 }
vinajarr 4:c6b4d8c152cd 330
vinajarr 4:c6b4d8c152cd 331 while(!lsm_int1_triggered){ wait_ms(1);}
vinajarr 4:c6b4d8c152cd 332 lsm_int1_triggered = false; // un-trigger
vinajarr 4:c6b4d8c152cd 333
vinajarr 4:c6b4d8c152cd 334
vinajarr 1:a7e3df03721c 335 if (lsm.readA(&acc[0],&acc[1],&acc[2])){
vinajarr 1:a7e3df03721c 336 pc.printf(" A[3] X:%+.4f,Y:%+.4f,Z:%+.4f\r\n",
vinajarr 4:c6b4d8c152cd 337 acc[2], acc[1],acc[2]);
vinajarr 1:a7e3df03721c 338 }
vinajarr 1:a7e3df03721c 339 else{
vinajarr 1:a7e3df03721c 340 pc.printf(" LSM303D don't work ");
vinajarr 4:c6b4d8c152cd 341 }
trm 0:6c6060a8a2f6 342 }
trm 0:6c6060a8a2f6 343
vinajarr 4:c6b4d8c152cd 344
vinajarr 4:c6b4d8c152cd 345
vinajarr 4:c6b4d8c152cd 346
vinajarr 4:c6b4d8c152cd 347
vinajarr 4:c6b4d8c152cd 348
trm 0:6c6060a8a2f6 349 int main(void)
trm 0:6c6060a8a2f6 350 {
vinajarr 1:a7e3df03721c 351 //inicializacion basico
trm 0:6c6060a8a2f6 352 t.reset();
vinajarr 4:c6b4d8c152cd 353 pc.baud(250000);
vinajarr 4:c6b4d8c152cd 354 sw3_int.mode(PullUp);
vinajarr 4:c6b4d8c152cd 355 sw3_int.fall(&SW3_interrupt);
vinajarr 4:c6b4d8c152cd 356 sw2_int.mode(PullUp);
vinajarr 1:a7e3df03721c 357
vinajarr 4:c6b4d8c152cd 358 i2c.frequency(200000); //Configure speed I2C 200kHz
vinajarr 1:a7e3df03721c 359
trm 0:6c6060a8a2f6 360 // Lights off (FRDM-K64F has active-low LEDs)
trm 0:6c6060a8a2f6 361 green.write(1);
trm 0:6c6060a8a2f6 362 red.write(1);
trm 0:6c6060a8a2f6 363 blue.write(1);
vinajarr 4:c6b4d8c152cd 364 /*
vinajarr 1:a7e3df03721c 365 //inicializacion Acelerometros
vinajarr 4:c6b4d8c152cd 366 //initFxox();
vinajarr 1:a7e3df03721c 367 initMma();
vinajarr 4:c6b4d8c152cd 368 //initMpu();
vinajarr 4:c6b4d8c152cd 369 //initLsm();
vinajarr 4:c6b4d8c152cd 370
vinajarr 1:a7e3df03721c 371 readAcc();
trm 0:6c6060a8a2f6 372 print_reading();
vinajarr 4:c6b4d8c152cd 373 */
vinajarr 2:237bd73c27e9 374 green.write(0);
vinajarr 2:237bd73c27e9 375 red.write(1);
vinajarr 2:237bd73c27e9 376 blue.write(1);
vinajarr 2:237bd73c27e9 377
vinajarr 1:a7e3df03721c 378 //esperar a pulsador
vinajarr 1:a7e3df03721c 379 while(!sw3_push){
vinajarr 1:a7e3df03721c 380 wait_ms(50);
trm 0:6c6060a8a2f6 381 }
vinajarr 4:c6b4d8c152cd 382
vinajarr 1:a7e3df03721c 383 pc.printf("Iniciando lectura de acelerometros\r\n");
vinajarr 4:c6b4d8c152cd 384 t.start();
vinajarr 4:c6b4d8c152cd 385 initMma();
vinajarr 2:237bd73c27e9 386 green.write(1);
vinajarr 2:237bd73c27e9 387 red.write(1);
vinajarr 4:c6b4d8c152cd 388 blue.write(0);
vinajarr 4:c6b4d8c152cd 389
vinajarr 4:c6b4d8c152cd 390 //Escribir en la SD
vinajarr 4:c6b4d8c152cd 391 mkdir("/sd/data", 0777);
vinajarr 4:c6b4d8c152cd 392 uint32_t number = do_list("/sd/data");
vinajarr 4:c6b4d8c152cd 393 char archivo[50];
vinajarr 4:c6b4d8c152cd 394 snprintf(archivo,50,"/sd/data/%06ld.xls",number);
vinajarr 4:c6b4d8c152cd 395 fp = fopen(archivo, "w");
vinajarr 4:c6b4d8c152cd 396 if (fp == NULL) {
vinajarr 4:c6b4d8c152cd 397 pc.printf("Unable to write the file \n");
vinajarr 4:c6b4d8c152cd 398 while(1){wait(1);}
vinajarr 4:c6b4d8c152cd 399 }
vinajarr 4:c6b4d8c152cd 400 fprintf(fp,"T\tVa\r\n");
vinajarr 4:c6b4d8c152cd 401 while(1)
vinajarr 4:c6b4d8c152cd 402 {
vinajarr 4:c6b4d8c152cd 403 if(escribirSD)
vinajarr 4:c6b4d8c152cd 404 {
vinajarr 4:c6b4d8c152cd 405 uint8_t j = puntero[1]==0?1:0;
vinajarr 4:c6b4d8c152cd 406 for(uint32_t i=0; i<size;i++)
vinajarr 4:c6b4d8c152cd 407 {
vinajarr 4:c6b4d8c152cd 408 fprintf(fp,"%d\t %.5f\r\n",tiempo[i][j],accT[i][j]);
vinajarr 4:c6b4d8c152cd 409 }
vinajarr 4:c6b4d8c152cd 410 escribirSD = false;
vinajarr 4:c6b4d8c152cd 411 }
vinajarr 4:c6b4d8c152cd 412 if(sw2_int.read()==0){
vinajarr 4:c6b4d8c152cd 413 mma_int1.disable_irq ();
vinajarr 4:c6b4d8c152cd 414
vinajarr 4:c6b4d8c152cd 415 for(uint32_t i=0; i<puntero[0];i++)
vinajarr 4:c6b4d8c152cd 416 {
vinajarr 4:c6b4d8c152cd 417 fprintf(fp,"%d\t %.5f\r\n",tiempo[i][puntero[1]],accT[i][puntero[1]]);
vinajarr 4:c6b4d8c152cd 418 }
vinajarr 4:c6b4d8c152cd 419 break;
vinajarr 4:c6b4d8c152cd 420 }
vinajarr 4:c6b4d8c152cd 421 }
vinajarr 2:237bd73c27e9 422
vinajarr 4:c6b4d8c152cd 423 pc.printf("fin escritura \r\n");
vinajarr 4:c6b4d8c152cd 424 fclose(fp);
vinajarr 4:c6b4d8c152cd 425
vinajarr 4:c6b4d8c152cd 426 fp = fopen(archivo, "r");
vinajarr 4:c6b4d8c152cd 427 if (fp == NULL) {
vinajarr 4:c6b4d8c152cd 428 pc.printf("Unable to open the file \n");
vinajarr 4:c6b4d8c152cd 429 while(1){wait(1);}
vinajarr 4:c6b4d8c152cd 430 }
vinajarr 4:c6b4d8c152cd 431 DigitalIn enSerial(D8);
vinajarr 4:c6b4d8c152cd 432 enSerial.mode(PullUp);
vinajarr 4:c6b4d8c152cd 433 if(enSerial.read()==1){
vinajarr 4:c6b4d8c152cd 434 while (1) { // print data por serial
vinajarr 4:c6b4d8c152cd 435 char ch = fgetc(fp); // until src EOF read.
vinajarr 4:c6b4d8c152cd 436 if (ch == EOF || ch == 0xFF) break;
vinajarr 4:c6b4d8c152cd 437 pc.printf("%c",ch);
vinajarr 4:c6b4d8c152cd 438 }
trm 0:6c6060a8a2f6 439 }
vinajarr 2:237bd73c27e9 440
vinajarr 2:237bd73c27e9 441 green.write(1);
vinajarr 2:237bd73c27e9 442 red.write(0);
vinajarr 2:237bd73c27e9 443 blue.write(1);
vinajarr 2:237bd73c27e9 444
vinajarr 4:c6b4d8c152cd 445 while (1) {}
vinajarr 4:c6b4d8c152cd 446
vinajarr 4:c6b4d8c152cd 447
vinajarr 4:c6b4d8c152cd 448
vinajarr 4:c6b4d8c152cd 449
vinajarr 4:c6b4d8c152cd 450
vinajarr 4:c6b4d8c152cd 451 /*
vinajarr 4:c6b4d8c152cd 452
vinajarr 4:c6b4d8c152cd 453 //lectura de todos los accelerometros
vinajarr 4:c6b4d8c152cd 454
vinajarr 4:c6b4d8c152cd 455 print_cabecera();
vinajarr 4:c6b4d8c152cd 456
vinajarr 4:c6b4d8c152cd 457 while(1){
vinajarr 4:c6b4d8c152cd 458 readAcc();
vinajarr 4:c6b4d8c152cd 459 print_data();
vinajarr 4:c6b4d8c152cd 460 if(sw2_int.read()==0) break;
vinajarr 4:c6b4d8c152cd 461 }
vinajarr 2:237bd73c27e9 462
vinajarr 2:237bd73c27e9 463
vinajarr 4:c6b4d8c152cd 464
vinajarr 4:c6b4d8c152cd 465
vinajarr 4:c6b4d8c152cd 466 */
vinajarr 1:a7e3df03721c 467 }
trm 0:6c6060a8a2f6 468
trm 0:6c6060a8a2f6 469
vinajarr 4:c6b4d8c152cd 470
vinajarr 4:c6b4d8c152cd 471
vinajarr 4:c6b4d8c152cd 472 uint32_t do_list(const char *fsrc)
vinajarr 4:c6b4d8c152cd 473 {
vinajarr 4:c6b4d8c152cd 474 DIR *d = opendir(fsrc);
vinajarr 4:c6b4d8c152cd 475 struct dirent *p;
vinajarr 4:c6b4d8c152cd 476 uint32_t counter = 0;
vinajarr 4:c6b4d8c152cd 477
vinajarr 4:c6b4d8c152cd 478 while ((p = readdir(d)) != NULL) {
vinajarr 4:c6b4d8c152cd 479 counter++;
vinajarr 4:c6b4d8c152cd 480 printf("%s\n", p->d_name);
vinajarr 4:c6b4d8c152cd 481 }
vinajarr 4:c6b4d8c152cd 482 closedir(d);
vinajarr 4:c6b4d8c152cd 483 return counter;
vinajarr 4:c6b4d8c152cd 484 }