Data loger, logs 3D acc/mag every 100ms on external flash drive, requires FRDM-KL46Z, copyrighted except libraries used
Dependencies: mbed Rejestrator
Acquisition.cpp@1:5ad44a4edff9, 2015-05-09 (annotated)
- 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?
User | Revision | Line number | New 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 |