![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
This will generate the message for the programme
Dependencies: MODSERIAL Nanopb
Diff: main.cpp
- Revision:
- 3:3888b5ecad7e
- Parent:
- 2:b46d53a5f931
- Child:
- 4:629ca12c04f4
diff -r b46d53a5f931 -r 3888b5ecad7e main.cpp --- a/main.cpp Fri Aug 30 14:51:08 2019 +0000 +++ b/main.cpp Thu Sep 05 08:28:26 2019 +0000 @@ -7,9 +7,11 @@ #include <vector> #include <iterator> -MODSERIAL pc(PA_9, PA_10, 512); //mcu TX, RX, 512 byte TX and RX buffers +#define BUFFER_SIZE 4096 -uint8_t buffer[512]; +MODSERIAL pc(PA_9, PA_10, BUFFER_SIZE); //mcu TX, RX, BUFFER_SIZE byte TX and RX buffers + +uint8_t buffer[BUFFER_SIZE]; size_t message_length; bool status; int i = 0; @@ -17,15 +19,59 @@ memspcr_ExperimentConfiguration exp_config = memspcr_ExperimentConfiguration_init_zero; int buffer_length; int n_points; +//int logging_interval_ms = 100; // typical for experimental testing +//int logging_interval_ms = 1000; // for drive electronics resistance measurement calibration +//int logging_interval_ms = 5000; // for consumable temperature calibration +int logging_interval_ms = 500; // for melt curve measurement std::vector<memspcr_ThermalStep> profile; +//Parameters for test ramp +//float resistance[9] = { 0.45, 0.525, 0.525, 0.535, 0.545, 0.555, 0.555}; +//int elapsed_time_ms[9] = { 0, 1000, 2000, 3000, 4000, 5000, 6000}; +//int camera_offset_ms[9] = { 0, 500, 500, 500, 500, 500, 500}; -//Parameters -float resistance[9] = {0.45,0.525,0.525,0.555,0.555,0.525,0.525,0.555}; -int elapsed_time_ms[9] = {0,5000,10000,10001,15000,15001,20000}; -int camera_offset_ms[9] = {0,0,250,0,100,100,100,200}; - +//Parameters for drive electronics resistance measurement calibration +//float resistance[2] = { 0, 0}; +//int elapsed_time_ms[2] = { 0, 20000}; +//int camera_offset_ms[2] = { 0, 0}; + +//Parameters for consumable temperature calibration +//float resistance[2] = { 0, 0}; +//int elapsed_time_ms[2] = { 0, 3600000}; +//int camera_offset_ms[2] = { 0, 0}; + +//Melt curve programmed later +//float melt_resistance_start = 0.525; +//float melt_resistance_end = 0.550; +//float resistance[103]; +//int elapsed_time_ms[103]; +//int camera_offset_ms[103]; + +//RT-PCR temperature profile programmed later +float resistance[165]; +float elapsed_time_ms[165]; +float camera_offset_ms[165]; + +int RT_ramp_time_ms = 1000; +int RT_hold_time_ms = 4000; +float RT_resistance = 0.500; + + +int hotstart_ramp_time_ms = 1000; +int hotstart_hold_time_ms = 4000; +float hotstart_resistance = 0.550; + +int low_ramp_time_ms = 2000; +int low_hold_time_ms = 3000; +float low_resistance = 0.520; + +int high_ramp_time_ms = 2000; +int high_hold_time_ms = 500; +float high_resistance = 0.550; + +int n_cycles = 40; +int camera_time_ms = 1000; void write_message() { @@ -71,20 +117,94 @@ int main() { + float melt_resistance_step; + /* This is the buffer where we will store our message. */ pc.baud(115200); n_points = sizeof(resistance)/sizeof(float); buffer_length = sizeof(buffer)/sizeof(uint8_t); - //Prepare message - for (i = 0; i < n_points; i++) - { - memspcr_ThermalStep step = memspcr_ThermalStep_init_zero; - step.resistance = resistance[i]; - step.elapsed_time_ms = elapsed_time_ms[i]; - step.camera_offset_ms = camera_offset_ms[i]; - profile.push_back(step); - } +// //Prepare temperature profile for melt curve with 100 images +// melt_resistance_step = (melt_resistance_end - melt_resistance_start)/100; +// +// //Initial setpoint +// resistance[0] = 0.450; +// elapsed_time_ms[0] = 0; +// camera_offset_ms[0] = 0; +// +// //Ramp to start of melt curve +// resistance[1] = melt_resistance_start; +// elapsed_time_ms[1] = 2500; +// camera_offset_ms[1] = 0; +// +// //Hold at start of melt curve +// resistance[2] = melt_resistance_start; +// elapsed_time_ms[2] = 5000; +// camera_offset_ms[2] = 0; +// +// //Ramp temperature and obtain 100 images +// for (i = 0; i < 100; i++) +// { +// resistance[i+3] = resistance[i+2] + melt_resistance_step; +// elapsed_time_ms[i+3] = elapsed_time_ms[i+2] + logging_interval_ms; +// camera_offset_ms[i+3] = 10; +// } +// +// for (i = 0; i < n_points; i++) +// { +// memspcr_ThermalStep step = memspcr_ThermalStep_init_zero; +// step.resistance = resistance[i]; +// step.elapsed_time_ms = elapsed_time_ms[i]; +// step.camera_offset_ms = camera_offset_ms[i]; +// profile.push_back(step); +// } + +//Prepare temperature profile for RT-PCR with hotstart and 40 cycles + +//RT +resistance[0] = 0.450; +elapsed_time_ms[0] = 0; +camera_offset_ms[0] = 0; + +resistance[1] = RT_resistance; +elapsed_time_ms[1] = RT_ramp_time_ms; +camera_offset_ms[1] = 0; + +resistance[2] = RT_resistance; +elapsed_time_ms[2] = elapsed_time_ms[1] + RT_hold_time_ms; +camera_offset_ms[2] = 0; + +//Hotstart +resistance[3] = RT_resistance; +elapsed_time_ms[3] = elapsed_time_ms[2] + hotstart_ramp_time_ms; +camera_offset_ms[3] = 0; + +resistance[4] = RT_resistance; +elapsed_time_ms[4] = elapsed_time_ms[3] + hotstart_hold_time_ms; +camera_offset_ms[4] = 0; + +//Thermocycle +for (i = 0; i < 4*n_cycles; i=i+4) +{ + // ramp high + resistance[i+4] = high_resistance; + elapsed_time_ms[i+4] = elapsed_time_ms[i+3] + high_ramp_time_ms; + camera_offset_ms[i+4] = 0; + // hold high + resistance[i+5] = high_resistance; + elapsed_time_ms[i+5] = elapsed_time_ms[i+4] + high_hold_time_ms; + camera_offset_ms[i+5] = 0; + // ramp low + resistance[i+6] = low_resistance; + elapsed_time_ms[i+6] = elapsed_time_ms[i+5] + low_ramp_time_ms; + camera_offset_ms[i+6] = 0; + // hold low + resistance[i+7] = low_resistance; + elapsed_time_ms[i+7] = elapsed_time_ms[i+6] + low_hold_time_ms; + camera_offset_ms[i+7] = low_hold_time_ms - camera_time_ms; +} + + //Set set points exp_config.profile.arg = &profile; exp_config.profile.funcs.encode = encode_callback; @@ -98,11 +218,9 @@ exp_config.optics.led_pwm = 0.5; exp_config.fluidics.pressure_setpoint = 0.4; exp_config.fluidics.pressure_hysterisis = 0.01; - exp_config.logging_interval_ms = 100; + exp_config.logging_interval_ms = logging_interval_ms; exp_config.selected_heater = memspcr_ExperimentConfiguration_Heater_MAIN; - - encode_message(); write_message();