First commit for threaded programme
Dependencies: Heater MODSERIAL FastPWM ADS8568_ADC
main.cpp
00001 #include "mbed.h" 00002 #include "MODSERIAL.h" 00003 #include "ADS8568_ADC.h" 00004 #include "Heater.h" 00005 #include "FastPWM.h" 00006 00007 #define ALL_CH 15 //value of convst bus to read all chanels simultaneosly 00008 00009 float r_gradient; 00010 float r_set_points[5] = {0.0,0.50,0.51,0.52,0.50}; 00011 int time_points[5] = {0,5000,10000,15000,20000}; 00012 int trig_time[5] = {0,0,50,50,50}; 00013 int curr_time; 00014 //Globals 00015 int camera_read_time; 00016 00017 MODSERIAL pc(PA_9, PA_10, 512); //mcu TX, RX, 512 byte TX and RX buffers 00018 ADS8568_ADC adc(PB_15, PB_14, PB_13, PB_12, PC_15, PC_0, PC_1, PC_2, PC_3); 00019 I2C i2c(PB_7, PB_8); //SDA, SCL 00020 Timer timer; 00021 DigitalIn adc_busy(PA_8); //Busy interrupt sig# 00022 00023 00024 //Heater Control 00025 FastPWM drive_1(PC_9); 00026 FastPWM drive_2(PC_8); 00027 FastPWM guard_1(PC_7); 00028 FastPWM guard_2(PC_6); 00029 00030 00031 //Heaters 00032 Heater heater_1(0,1,&drive_1, &guard_1, 525.2, -206); 00033 Heater heater_2(2,3,&drive_2, &guard_2, 525.2, -206); 00034 00035 //indicator LEDs 00036 DigitalOut hb_led(PC_13); //Green 00037 DigitalOut led_0(PC_4); //Red 00038 DigitalOut led_1(PC_5); //Green 00039 00040 //User buttons 00041 DigitalIn user_0(PB_0); 00042 DigitalIn user_1(PB_1); 00043 00044 BusOut converts(PC_0, PC_1, PC_2, PC_3); 00045 00046 00047 //Threads 00048 Thread serial_listen; 00049 Thread heater_control; 00050 00051 //Semaphores 00052 Semaphore heater_semaphore; 00053 00054 //Tickers 00055 Ticker heat_tick; 00056 Ticker pressure_tick; 00057 00058 00059 //Flags 00060 bool start_flag = false; 00061 bool config_flag = false; 00062 volatile bool heater_flag = false; 00063 bool triggered_flag = false; 00064 bool untriggered_flag = false; 00065 00066 00067 //Functions 00068 00069 void serial_rx(){ 00070 while(pc.getc() != 'c'); 00071 config_flag = true; 00072 while(pc.getc() != 's'); 00073 start_flag = true; 00074 } 00075 00076 00077 void temp_trigger() { 00078 heater_flag = true; 00079 led_1 = !led_1; 00080 } 00081 00082 void temp_control() { 00083 while(1){ 00084 while(!heater_flag); 00085 heater_1.update(); 00086 } 00087 } 00088 00089 00090 void set_point_routine() { 00091 for (int i_set = 1; i_set < sizeof(r_set_points)/sizeof(float); i_set ++){ 00092 r_gradient = (r_set_points[i_set] - r_set_points[i_set-1])/(time_points[i_set] - time_points[i_set-1]); 00093 while ((curr_time = timer.read_ms()) <= time_points[i_set]){ 00094 heater_1.Set_ref(r_set_points[i_set-1] + r_gradient * (curr_time - time_points[i_set-1])); 00095 if (!triggered_flag && curr_time > time_points[i_set - 1] + trig_time[i_set]){ 00096 //Start camera trigger 00097 triggered_flag = true; 00098 } 00099 if (!untriggered_flag && curr_time > time_points[i_set - 1] + trig_time[i_set] + camera_read_time){ 00100 //End camera read 00101 untriggered_flag = true; 00102 } 00103 wait_ms(1); 00104 } 00105 00106 } 00107 } 00108 00109 void pressure_control() { 00110 //Input pressure control function here 00111 //i.e. 00112 //read_pressure(); 00113 //if (pressure < lower_bound) { 00114 //pump_turn_on(); 00115 //} 00116 //else if (pressure > upper_bound) { 00117 //pump_turn_off(); 00118 //} 00119 } 00120 00121 00122 00123 00124 int main() { 00125 pc.baud(115200); 00126 00127 serial_listen.start(&serial_rx); 00128 heater_control.start(& temp_control); 00129 pressure_tick.attach(& pressure_control, 1); 00130 heat_tick.attach_us(& temp_trigger,3000); 00131 00132 while (!start_flag){ 00133 pc.printf("Waiting for start signal\n"); 00134 wait(1); 00135 } 00136 00137 pc.printf("Starting routine...\n"); 00138 set_point_routine(); 00139 00140 00141 }
Generated on Wed Jul 13 2022 17:11:36 by 1.7.2