First commit for threaded programme

Dependencies:   Heater MODSERIAL FastPWM ADS8568_ADC

Revision:
98:6c7c7d36a5fe
Parent:
88:bea4f2daa48c
--- a/main.cpp	Tue Jul 23 12:00:36 2019 +0100
+++ b/main.cpp	Mon Aug 19 07:55:48 2019 +0000
@@ -1,32 +1,141 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2018 ARM Limited
- * SPDX-License-Identifier: Apache-2.0
- */
+#include "mbed.h"
+#include "MODSERIAL.h"
+#include "ADS8568_ADC.h"
+#include "Heater.h"
+#include "FastPWM.h"
+
+#define ALL_CH              15     //value of convst bus to read all chanels simultaneosly
+
+float r_gradient;
+float r_set_points[5] = {0.0,0.50,0.51,0.52,0.50};
+int time_points[5] = {0,5000,10000,15000,20000};
+int trig_time[5] = {0,0,50,50,50};
+int curr_time;
+//Globals
+int camera_read_time;
+
+MODSERIAL pc(PA_9, PA_10, 512); //mcu TX, RX, 512 byte TX and RX buffers
+ADS8568_ADC adc(PB_15, PB_14, PB_13, PB_12, PC_15, PC_0, PC_1, PC_2, PC_3);
+I2C i2c(PB_7, PB_8);            //SDA, SCL
+Timer timer;
+DigitalIn adc_busy(PA_8);                   //Busy interrupt sig#
+
+
+//Heater Control
+FastPWM drive_1(PC_9);
+FastPWM drive_2(PC_8);
+FastPWM guard_1(PC_7);
+FastPWM guard_2(PC_6);
+
+
+//Heaters
+Heater heater_1(0,1,&drive_1, &guard_1, 525.2, -206);
+Heater heater_2(2,3,&drive_2, &guard_2, 525.2, -206);
 
-#include "mbed.h"
-#include "stats_report.h"
+//indicator LEDs
+DigitalOut hb_led(PC_13);       //Green
+DigitalOut led_0(PC_4);         //Red
+DigitalOut led_1(PC_5);         //Green
+
+//User buttons
+DigitalIn user_0(PB_0);
+DigitalIn user_1(PB_1);
+
+BusOut converts(PC_0, PC_1, PC_2, PC_3);
+
+
+//Threads
+Thread serial_listen;
+Thread heater_control;
 
-DigitalOut led1(LED1);
+//Semaphores
+Semaphore heater_semaphore;
+
+//Tickers
+Ticker heat_tick;
+Ticker pressure_tick;
+
 
-#define SLEEP_TIME                  500 // (msec)
-#define PRINT_AFTER_N_LOOPS         20
+//Flags
+bool start_flag = false;
+bool config_flag = false;
+volatile bool heater_flag = false;
+bool triggered_flag = false;
+bool untriggered_flag = false;
+
+
+//Functions
 
-// main() runs in its own thread in the OS
-int main()
-{
-    SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */);
+void serial_rx(){
+    while(pc.getc() != 'c');
+    config_flag = true;
+    while(pc.getc() != 's');
+    start_flag = true;
+    }
+    
+    
+void temp_trigger() {
+    heater_flag = true;
+    led_1 = !led_1;
+    }
+
+void temp_control() {
+    while(1){
+        while(!heater_flag);
+        heater_1.update();
+        } 
+    }
 
-    int count = 0;
-    while (true) {
-        // Blink LED and wait 0.5 seconds
-        led1 = !led1;
-        wait_ms(SLEEP_TIME);
+    
+void set_point_routine() {
+    for (int i_set = 1; i_set < sizeof(r_set_points)/sizeof(float); i_set ++){
+        r_gradient = (r_set_points[i_set] - r_set_points[i_set-1])/(time_points[i_set] - time_points[i_set-1]);
+        while ((curr_time = timer.read_ms()) <= time_points[i_set]){
+            heater_1.Set_ref(r_set_points[i_set-1] + r_gradient * (curr_time - time_points[i_set-1]));
+            if (!triggered_flag && curr_time > time_points[i_set - 1] + trig_time[i_set]){
+                //Start camera trigger
+                triggered_flag = true;
+                }
+            if (!untriggered_flag && curr_time > time_points[i_set - 1] + trig_time[i_set] + camera_read_time){
+                //End camera read
+                untriggered_flag = true;
+                }
+            wait_ms(1);
+        }
+        
+    }
+}   
 
-        if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) {
-            // Following the main thread wait, report on the current system status
-            sys_state.report_state();
-            count = 0;
+void pressure_control() {
+    //Input pressure control function here
+    //i.e.
+    //read_pressure();
+    //if (pressure < lower_bound) {
+            //pump_turn_on();
+        //}
+    //else if (pressure > upper_bound) {
+            //pump_turn_off();
+        //}
+    }
+            
+
+        
+        
+int main() {
+    pc.baud(115200);
+    
+    serial_listen.start(&serial_rx);
+    heater_control.start(& temp_control);
+    pressure_tick.attach(& pressure_control, 1);
+    heat_tick.attach_us(& temp_trigger,3000);
+    
+    while (!start_flag){
+        pc.printf("Waiting for start signal\n");
+        wait(1);
         }
-        ++count;
-    }
-}
+    
+    pc.printf("Starting routine...\n");
+    set_point_routine();
+
+
+    }
\ No newline at end of file