J&W / Mbed 2 deprecated Rejestrator

Dependencies:   mbed Rejestrator

Dependents:   Rejestrator

Revision:
0:fa31f8461c63
Child:
1:5ad44a4edff9
diff -r 000000000000 -r fa31f8461c63 Acquisition.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Acquisition.cpp	Sat Apr 18 17:01:57 2015 +0000
@@ -0,0 +1,97 @@
+#include "Acquisition.h"
+
+AnalogIn light(PTE22);
+AnalogIn Ain0(PTE20);
+AnalogOut Aout(PTE30);
+MAG3110 mag(SDA, SCL);
+MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+
+long int global_time = 0;
+bool was_overflow = false;
+struct row_type last_measurement;
+
+led_live aquisition_led(0.01, 0.5, 1.);
+
+void RunningTimer(const void *param)
+{
+    if (operating_mode != Exiting)
+    {
+        ++global_time;
+    }
+}
+
+void RunningAcquisition(const void *param)
+{
+    osStatus put_result;
+    if (operating_mode == Collecting)
+    {
+        struct row_type *data_buffer = data_memory.alloc();
+
+        mag.getValues(&data_buffer->mag_x, &data_buffer->mag_y, &data_buffer->mag_z);
+        data_buffer->mag_x = (int)((int16_t)data_buffer->mag_x);
+        data_buffer->mag_y = (int)((int16_t)data_buffer->mag_y);
+        data_buffer->mag_z = (int)((int16_t)data_buffer->mag_z);
+        
+        data_buffer->giro_x = 0;
+        data_buffer->giro_y = 0;
+        data_buffer->giro_z = 0;
+
+        data_buffer->acc_x = acc.getAccX_int();
+        data_buffer->acc_y = acc.getAccY_int();
+        data_buffer->acc_z = acc.getAccZ_int();
+
+        data_buffer->light = light.read();
+        data_buffer->Ain0 = Ain0.read();
+
+        data_buffer->temperature = mag.getTemperature();
+
+        data_buffer->tsi = global_tsi;
+
+        data_buffer->time = global_time;
+        data_buffer->was_overflow = was_overflow;
+        
+        put_result = data_queue.put(data_buffer, 10);
+        last_measurement = *data_buffer;
+        switch (put_result)
+        {
+            case osOK:
+            case osEventMessage:
+                was_overflow = false;
+                break;
+            case osEventTimeout:
+                was_overflow = true;
+                data_memory.free(data_buffer);
+                break;
+        }
+        aquisition_led.live(led_green);
+    }
+}
+
+void ThreadAcquisition(const void *param)
+{
+    led_green = 1.;
+
+    rtos::RtosTimer timer(RunningTimer, osTimerPeriodic, NULL);
+    rtos::RtosTimer Acquisition(RunningAcquisition, osTimerPeriodic, NULL);
+
+    timer.start(1); 
+    Acquisition.start(100);
+
+    while (operating_mode != Exiting)
+    {
+        rtos::Thread::wait(100);
+    }
+
+    rtos::Thread::wait(200); // free the waif for buffer
+    Acquisition.stop();
+    timer.stop();
+
+    for (int i=0; i<10; ++i)
+    {
+        led_green = 0.9;
+        rtos::Thread::wait(100);
+        led_green = 0.1;
+        rtos::Thread::wait(100);
+    }
+    led_green = 1.;
+}