Data loger, logs 3D acc/mag every 100ms on external flash drive, requires FRDM-KL46Z, copyrighted except libraries used

Dependencies:   mbed Rejestrator

Dependents:   Rejestrator

Committer:
Waldek
Date:
Sat May 09 15:06:38 2015 +0000
Revision:
1:5ad44a4edff9
Parent:
0:fa31f8461c63
Correction in the magnetic measurement

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Waldek 0:fa31f8461c63 1 #include "Acquisition.h"
Waldek 0:fa31f8461c63 2
Waldek 0:fa31f8461c63 3 AnalogIn light(PTE22);
Waldek 0:fa31f8461c63 4 AnalogIn Ain0(PTE20);
Waldek 0:fa31f8461c63 5 AnalogOut Aout(PTE30);
Waldek 0:fa31f8461c63 6 MAG3110 mag(SDA, SCL);
Waldek 0:fa31f8461c63 7 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
Waldek 0:fa31f8461c63 8
Waldek 0:fa31f8461c63 9 long int global_time = 0;
Waldek 0:fa31f8461c63 10 bool was_overflow = false;
Waldek 0:fa31f8461c63 11 struct row_type last_measurement;
Waldek 0:fa31f8461c63 12
Waldek 0:fa31f8461c63 13 led_live aquisition_led(0.01, 0.5, 1.);
Waldek 0:fa31f8461c63 14
Waldek 0:fa31f8461c63 15 void RunningTimer(const void *param)
Waldek 0:fa31f8461c63 16 {
Waldek 0:fa31f8461c63 17 if (operating_mode != Exiting)
Waldek 0:fa31f8461c63 18 {
Waldek 0:fa31f8461c63 19 ++global_time;
Waldek 0:fa31f8461c63 20 }
Waldek 0:fa31f8461c63 21 }
Waldek 0:fa31f8461c63 22
Waldek 0:fa31f8461c63 23 void RunningAcquisition(const void *param)
Waldek 0:fa31f8461c63 24 {
Waldek 0:fa31f8461c63 25 osStatus put_result;
Waldek 0:fa31f8461c63 26 if (operating_mode == Collecting)
Waldek 0:fa31f8461c63 27 {
Waldek 0:fa31f8461c63 28 struct row_type *data_buffer = data_memory.alloc();
Waldek 0:fa31f8461c63 29
Waldek 1:5ad44a4edff9 30 // mag.getValues(&data_buffer->mag_x, &data_buffer->mag_y, &data_buffer->mag_z);
Waldek 1:5ad44a4edff9 31 data_buffer->mag_x = (int)mag.readVal(MAG_OUT_X_MSB);
Waldek 1:5ad44a4edff9 32 // (int)((int16_t)data_buffer->mag_x);
Waldek 1:5ad44a4edff9 33 data_buffer->mag_y = (int)mag.readVal(MAG_OUT_Y_MSB);
Waldek 1:5ad44a4edff9 34 // (int)((int16_t)data_buffer->mag_y);
Waldek 1:5ad44a4edff9 35 data_buffer->mag_z = (int)mag.readVal(MAG_OUT_Z_MSB);
Waldek 1:5ad44a4edff9 36 // (int)((int16_t)data_buffer->mag_z);
Waldek 0:fa31f8461c63 37
Waldek 0:fa31f8461c63 38 data_buffer->giro_x = 0;
Waldek 0:fa31f8461c63 39 data_buffer->giro_y = 0;
Waldek 0:fa31f8461c63 40 data_buffer->giro_z = 0;
Waldek 0:fa31f8461c63 41
Waldek 0:fa31f8461c63 42 data_buffer->acc_x = acc.getAccX_int();
Waldek 0:fa31f8461c63 43 data_buffer->acc_y = acc.getAccY_int();
Waldek 0:fa31f8461c63 44 data_buffer->acc_z = acc.getAccZ_int();
Waldek 0:fa31f8461c63 45
Waldek 0:fa31f8461c63 46 data_buffer->light = light.read();
Waldek 0:fa31f8461c63 47 data_buffer->Ain0 = Ain0.read();
Waldek 0:fa31f8461c63 48
Waldek 0:fa31f8461c63 49 data_buffer->temperature = mag.getTemperature();
Waldek 0:fa31f8461c63 50
Waldek 0:fa31f8461c63 51 data_buffer->tsi = global_tsi;
Waldek 0:fa31f8461c63 52
Waldek 0:fa31f8461c63 53 data_buffer->time = global_time;
Waldek 0:fa31f8461c63 54 data_buffer->was_overflow = was_overflow;
Waldek 0:fa31f8461c63 55
Waldek 0:fa31f8461c63 56 put_result = data_queue.put(data_buffer, 10);
Waldek 0:fa31f8461c63 57 last_measurement = *data_buffer;
Waldek 0:fa31f8461c63 58 switch (put_result)
Waldek 0:fa31f8461c63 59 {
Waldek 0:fa31f8461c63 60 case osOK:
Waldek 0:fa31f8461c63 61 case osEventMessage:
Waldek 0:fa31f8461c63 62 was_overflow = false;
Waldek 0:fa31f8461c63 63 break;
Waldek 0:fa31f8461c63 64 case osEventTimeout:
Waldek 0:fa31f8461c63 65 was_overflow = true;
Waldek 0:fa31f8461c63 66 data_memory.free(data_buffer);
Waldek 0:fa31f8461c63 67 break;
Waldek 0:fa31f8461c63 68 }
Waldek 0:fa31f8461c63 69 aquisition_led.live(led_green);
Waldek 0:fa31f8461c63 70 }
Waldek 0:fa31f8461c63 71 }
Waldek 0:fa31f8461c63 72
Waldek 0:fa31f8461c63 73 void ThreadAcquisition(const void *param)
Waldek 0:fa31f8461c63 74 {
Waldek 0:fa31f8461c63 75 led_green = 1.;
Waldek 0:fa31f8461c63 76
Waldek 0:fa31f8461c63 77 rtos::RtosTimer timer(RunningTimer, osTimerPeriodic, NULL);
Waldek 0:fa31f8461c63 78 rtos::RtosTimer Acquisition(RunningAcquisition, osTimerPeriodic, NULL);
Waldek 1:5ad44a4edff9 79 /*
Waldek 1:5ad44a4edff9 80 // debug
Waldek 1:5ad44a4edff9 81 {
Waldek 1:5ad44a4edff9 82 extern Serial pc;
Waldek 1:5ad44a4edff9 83 pc.printf("\nMag regs: ");
Waldek 1:5ad44a4edff9 84 for (int i=0; i<20; ++i)
Waldek 1:5ad44a4edff9 85 {
Waldek 1:5ad44a4edff9 86 pc.printf("%02X ", mag.readReg(i));
Waldek 1:5ad44a4edff9 87 }
Waldek 1:5ad44a4edff9 88 pc.printf(".\n");
Waldek 1:5ad44a4edff9 89 for (int i=0; i<1000; ++i)
Waldek 1:5ad44a4edff9 90 {
Waldek 1:5ad44a4edff9 91 pc.printf("%d %d %d \n", mag.readVal(MAG_OUT_X_MSB), mag.readVal(MAG_OUT_Y_MSB), mag.readVal(MAG_OUT_Z_MSB));
Waldek 1:5ad44a4edff9 92 }
Waldek 1:5ad44a4edff9 93 }
Waldek 1:5ad44a4edff9 94 */
Waldek 0:fa31f8461c63 95 timer.start(1);
Waldek 0:fa31f8461c63 96 Acquisition.start(100);
Waldek 0:fa31f8461c63 97
Waldek 0:fa31f8461c63 98 while (operating_mode != Exiting)
Waldek 0:fa31f8461c63 99 {
Waldek 0:fa31f8461c63 100 rtos::Thread::wait(100);
Waldek 0:fa31f8461c63 101 }
Waldek 0:fa31f8461c63 102
Waldek 0:fa31f8461c63 103 rtos::Thread::wait(200); // free the waif for buffer
Waldek 0:fa31f8461c63 104 Acquisition.stop();
Waldek 0:fa31f8461c63 105 timer.stop();
Waldek 0:fa31f8461c63 106
Waldek 0:fa31f8461c63 107 for (int i=0; i<10; ++i)
Waldek 0:fa31f8461c63 108 {
Waldek 0:fa31f8461c63 109 led_green = 0.9;
Waldek 0:fa31f8461c63 110 rtos::Thread::wait(100);
Waldek 0:fa31f8461c63 111 led_green = 0.1;
Waldek 0:fa31f8461c63 112 rtos::Thread::wait(100);
Waldek 0:fa31f8461c63 113 }
Waldek 0:fa31f8461c63 114 led_green = 1.;
Waldek 0:fa31f8461c63 115 }
Waldek 1:5ad44a4edff9 116