LEX_Threaded_Programming
Dependencies: Heater_V2 MODSERIAL Nanopb FastPWM ADS8568_ADC
Diff: main.cpp
- 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;