LEX_Threaded_Programming

Dependencies:   Heater_V2 MODSERIAL Nanopb FastPWM ADS8568_ADC

Revision:
31:09d2f3e4ed99
Parent:
30:b28088f244c2
Child:
32:c825071486eb
diff -r b28088f244c2 -r 09d2f3e4ed99 main.cpp
--- a/main.cpp	Sat Nov 16 06:21:24 2019 +0000
+++ b/main.cpp	Mon Nov 18 13:49:01 2019 +0000
@@ -11,6 +11,7 @@
 #include <iterator>
 
 #define BUFFER_SIZE 8192
+#define PRESSURE_SMOOTH_FACTOR 0.9
 
 //UID lookup address and pointer
 #define UID_ADDR 0x1FFF7A10
@@ -47,11 +48,11 @@
 DigitalIn adc_busy(PA_8);                   //Busy interrupt sig#
 
 //Fluidic Control
-AnalogIn pressure_1(PA_0);
+AnalogIn pressure_0(PA_0);
 AnalogIn pressure_1(PA_1);
 DigitalOut pump(PA_4);
-DigitalOut valve_1(PA_5);
-DigitalOut valve_2(PA_6);
+DigitalOut valve_0(PA_5);
+DigitalOut valve_1(PA_6);
 
 float pressure_in;
 float pressure_out;
@@ -180,10 +181,10 @@
     flags.set(0x2);
 }
 
-void pressure_trigger()
-{
-    flags.set(0x4);
-}
+//void pressure_trigger()
+//{
+//    flags.set(0x4);
+//}
 
 
 //Other functions__________________________________________________________________
@@ -210,18 +211,15 @@
 }
 
 void pressure_control() {
-    while(1){
-        flags.wait_any(0x4,osWaitForever,true);
-        pressure_in = pressure_1.read();  // fraction of supply voltage as float in range 0-1; values 0.1-0.9 correspond to 0-15PSI using pressure sensor Honeywell HSCSANN015PGAA3
-        pressure_out = pressure_2.read();
+    pressure_in  = pressure_in  * PRESSURE_SMOOTH_FACTOR + (1 - PRESSURE_SMOOTH_FACTOR) * pressure_1.read();
+    pressure_out = pressure_out * PRESSURE_SMOOTH_FACTOR + (1 - PRESSURE_SMOOTH_FACTOR) * pressure_0.read();
         if (pressure_in < exp_config.fluidics.pressure_sensor_setpoint_adc - exp_config.fluidics.pressure_sensor_hysteresis_adc) {
-            led_1 = 1;
-            pump = 1;
-        }
-        else if (pressure_in > exp_config.fluidics.pressure_sensor_setpoint_adc) {
-            led_1 = 0;
-            pump = 0;
-        }
+        led_1 = 1;
+//        pump = 1;
+    }
+    else if (pressure_in > exp_config.fluidics.pressure_sensor_setpoint_adc) {
+        led_1 = 0;
+//        pump = 0;
     }
 }
 
@@ -267,6 +265,13 @@
     int i_board = -1;  
     int i_heater;
     float drive_cal_a, drive_cal_b;
+    
+    // turn off pump and valves and LED drive
+    pump = 0;
+    valve_0 = 0;
+    valve_1 = 0;
+    camTrigger = 0;
+    ledDrive = 0;
         
     pc.baud(115200);
     adc.init();
@@ -326,8 +331,8 @@
     pc.printf("# Waiting for signal to begin [PRESSURE] control (type p or press button 0)\n");
     while (pc.getcNb()!='p' && !user_0);
     pc.printf("# Pressure control start signal received\n");
-    pressure_thread.start(& pressure_control);
-    pressure_tick.attach_us(& pressure_trigger, exp_config.fluidics.pressure_control_loop_interval_ms * 1000); 
+    //pressure_thread.start(& pressure_control);
+    pressure_tick.attach_us(& pressure_control, exp_config.fluidics.pressure_control_loop_interval_ms * 1000); 
 
     //Start logging
     logging_thread.start(& log_state);