LEX_Threaded_Programming

Dependencies:   Heater_V2 MODSERIAL Nanopb FastPWM ADS8568_ADC

Revision:
9:9474da78cec3
Parent:
8:58c6d51957df
Child:
10:f8202e71e765
--- a/main.cpp	Thu Sep 05 08:29:32 2019 +0000
+++ b/main.cpp	Thu Sep 12 12:43:07 2019 +0000
@@ -11,6 +11,8 @@
 #include <iterator>
 
 #define BUFFER_SIZE 4096
+#define LED_PULSE_PERIOD 8400    // ticks, 10kHz when CPU clock is 84MHz
+#define LED_PULSE_WIDTH 4200     // ticks, 50% duty cycle
 
 Heater * heater;
 float r_gradient; //setpoint setting
@@ -38,6 +40,8 @@
 
 int heater_ID = 0;
 
+//Illumination LED Control
+
 
 //Indicator LEDs
 DigitalOut hb_led(PC_13);       //Green
@@ -46,7 +50,7 @@
 
 //Camera and LED drive
 DigitalOut camTrigger(PB_2);     //Trigger camera
-DigitalOut ledDrive(PB_4);       //Drive LED for fluorescence detection
+FastPWM ledDrive(PB_4);          //PWM drive LED for fluorescence detection
 
 //User buttons
 DigitalIn user_0(PB_0);
@@ -200,21 +204,21 @@
         while ((curr_time = timer.read_ms()) <= it->elapsed_time_ms){
             heater->Set_ref(it_prev->resistance + r_gradient * (curr_time - it_prev->elapsed_time_ms));   
                              
-            if (!triggered_flag && (it->camera_offset_ms > 0) && (curr_time > it_prev->elapsed_time_ms + it->camera_offset_ms))
+            if (!triggered_flag && (it->camera_offset_ms != 0) && (curr_time > it_prev->elapsed_time_ms + it->camera_offset_ms))
             {
-                //Start camera exposure and turn on LED
+                //Start camera exposure and turn on LED if camera_offset_ms is non-zero
                 camTrigger = 0;
                 wait_us(10);
                 camTrigger = 1;
-                ledDrive = 1;
                 led_0 = 1;
+                ledDrive.pulsewidth_ticks(LED_PULSE_WIDTH);
                 triggered_flag = true;
             }
             wait_us(200);
         }
         //Stop camera exposure and turn off LED at end of time segment
         camTrigger = 0;
-        ledDrive = 0;
+        ledDrive.pulsewidth_ticks(0);
         led_0 = 0;
     }
 }   
@@ -228,6 +232,11 @@
     buffer_length = sizeof(buffer)/sizeof(uint8_t);
     pc.printf("# Input configuration file\n");
 
+    //set up LED PWM drive
+    ledDrive.prescaler(1);
+    ledDrive.period_ticks(LED_PULSE_PERIOD);   
+    ledDrive.pulsewidth_ticks(0);
+        
     //set up nanopb
     std::vector<memspcr_ThermalStep> profile;
     exp_config.profile.funcs.decode = decode_callback;