Program for FRDM-64k for read five accelerometers
Dependencies: FXOS8700CQ LSM303D MMA8451Q MPU6050 mbed
Fork of fxos8700cq_example by
main.cpp@4:c6b4d8c152cd, 2018-01-18 (annotated)
- 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?
User | Revision | Line number | New 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,®_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,®_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,®_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 | } |