Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: KellerDruck_pressure PID PWM-Coil-driver Sensirion_SF04 VL6180
Fork of HSPFLOW1 by
Diff: main.cpp
- Revision:
- 4:79b23d1fbcd1
- Parent:
- 3:9ff79ea3a294
- Child:
- 5:8e47d5323647
diff -r 9ff79ea3a294 -r 79b23d1fbcd1 main.cpp
--- a/main.cpp Mon Jul 24 15:38:39 2017 +0000
+++ b/main.cpp Wed Jul 26 14:03:10 2017 +0000
@@ -1,5 +1,37 @@
#include "main.h"
+//---------------------------
+void dutycycleincrease()
+{
+ dutycycle=dutycycle+0.01;
+}
+void dutycycledecrease()
+{
+ dutycycle=dutycycle-0.01;
+}
+
+void frequencyincrease()
+{
+ frequency=frequency+1;
+}
+void frequencydecrease()
+{
+ frequency=frequency-1;
+}
+void injectorvalvecontrol(){
+
+while(true){
+float openvalue=(((1/frequency)*dutycycle));
+float offvalue=(1/frequency)-openvalue;
+
+injector.on();
+wait(openvalue);
+injector.off();
+wait(offvalue);
+}
+}
+
+//-----------------------------
void pumpTachTrigger()
{
pumpTachCounts++;
@@ -16,7 +48,7 @@
{
pump.period(.001); // 1kHz PWM
pump = 0;
- ledGrn.period(.001);
+ //ledGrn.period(.001);
InterruptIn pumpTach(pumpTachPin);
pumpTach.rise(&pumpTachTrigger);
@@ -40,7 +72,7 @@
//PID calculation and set the new output value.
pump = pump_control_PID.compute();
//pump = 0.1;
- ledGrn = ((float)1.0-pump.read());
+ //ledGrn = ((float)1.0-pump.read());
}
}
@@ -53,7 +85,7 @@
i2c1_m.lock();
timer.reset();
error = pumpPressure.readPT();
- error |= mixerPressure.readPT();
+ //error |= mixerPressure.readPT();
int wait = (200 - timer.read_ms());
i2c1_m.unlock();
Thread::wait(wait);
@@ -61,7 +93,7 @@
}
}
-void update_airflow()
+void update_flow1()
{
Timer timer;
timer.start();
@@ -69,35 +101,29 @@
while (true) {
i2c2_m.lock();
timer.reset();
- error = sfm7033.Measure(FLOW);
+ error = mainflow.Measure(FLOW);
int wait = (200 - timer.read_ms());
i2c2_m.unlock();
Thread::wait(wait);
}
}
-void update_level()
+//------------------------------------------------
+void update_flow2()
{
Timer timer;
timer.start();
+ char error;
while (true) {
- i2c1_m.lock();
+ i2c3_m.lock();
timer.reset();
- agentlevel = (float)level;
- int wait = (1000 - timer.read_ms());
- i2c1_m.unlock();
+ error = loopflow.Measure(FLOW);
+ int wait = (200 - timer.read_ms());
+ i2c3_m.unlock();
Thread::wait(wait);
}
}
-
-//float get_level()
-//{
-// i2c1_m.lock();
-// float value = (float)level;
-// i2c1_m.unlock();
-// return value;
-//}
-
+//------------------------------------------------
void print_process_values()
{
@@ -108,12 +134,12 @@
stdio_m.lock();
timer.reset();
- pc.printf("%.02fkPa %.02fpsi %.02fC %.02fF %02X %.02fkPa %.02fpsi %.02fC %.02fF %02X %.2f%% %.0fRPM %u %.0f %s %.1f %.3f\r\n",
- pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.temperatureF, pumpPressure.status,
- mixerPressure.pressureKPA, mixerPressure.pressurePSI, mixerPressure.temperatureC, mixerPressure.temperatureF, mixerPressure.status,
+ pc.printf("%.02fkPa %.02fpsi %.02fC %02X %.2f%% %.0fRPM %u %.0f %s %u %.0f %s %.3f %.02fHz %.02f\r\n",
+ pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.status,
pump.read()*100, pumpRpm,
- sfm7033.flow.u16, (((float)sfm7033.flow.i16 / 2) / sfm7033.scaleFactor.u16), sfm7033.flowUnitStr,
- (double)pot1*18, ((double)pot2)*pumpMaxPSI);//, agentlevel;
+ mainflow.flow.u16, (((float)mainflow.flow.i16) / mainflow.scaleFactor.u16), mainflow.flowUnitStr,
+ loopflow.flow.u16, (((float)loopflow.flow.i16) / loopflow.scaleFactor.u16), loopflow.flowUnitStr,
+ ((double)pot2)*pumpMaxPSI, frequency, dutycycle);//, agentlevel;
int wait = (1000 - timer.read_ms());
stdio_m.unlock();
@@ -121,97 +147,42 @@
}
}
-void update_lcd()
-{
- Timer timer;
- timer.start();
- while (true) {
- float flow = ((((float)sfm7033.flow.i16 / 2) / sfm7033.scaleFactor.u16) < 0 ? 0 : (((float)sfm7033.flow.i16 / 2) / sfm7033.scaleFactor.u16));
- flow = flow/1000;
- stdio_m.lock();
- timer.reset();
- lcd.cls();
- lcd.font((unsigned char*)ArialR12x14);
- lcd.locate(0, 0);
- lcd.printf("%.2f slpm AA: %.1f", flow, (double)pot1*18);
- lcd.locate(0, 14);
- lcd.printf("PV: %.1f", pumpPressure.pressurePSI);
- lcd.locate(64, 14);
- lcd.printf("SV: %.1f", ((double)pot2)*pumpMaxPSI);
- int wait = (1000 - timer.read_ms());
- stdio_m.unlock();
- Thread::wait(wait);
- }
-}
-
-void update_shutoff()
-{
- Timer timer;
- timer.start();
- while (true) {
- float threshold = 0.1;
- timer.reset();
- if((double)pot1 < 0.05) {
- shutoff.off();
- //pc.printf("shutoff off\r\n");
- //Thread::wait(1000);
- }
- if((double)pot1 >= 0.1) {
- shutoff.on();
- //pc.printf("shutoff on\r\n");
- //Thread::wait(1000);
- }
- int wait = (200 - timer.read_ms());
- Thread::wait(wait);
- }
-}
-
// main() runs in its own thread in the OS
int main()
{
pump_init();
- ledBlu = 1;
+ //ledBlu = 1;
pc.printf("Serenity Starting up...\n\r");
- /*pc.printf("Pmin: %.03f Pmax: %.03f\r\n", pumpPressure.pmin, pumpPressure.pmax);
- pc.printf("Year: %d Month: %d Day: %d Mode: %d\r\n", pumpPressure.year, pumpPressure.month, pumpPressure.day, pumpPressure.mode);
- pc.printf("Status: 0x%x\r\n", pumpPressure.getStatus());*/
+//--------------------------------------------
+dutycycleup.rise(&dutycycleincrease);
+dutycycledown.rise(&dutycycledecrease);
+frequencyup.rise(&frequencyincrease);
+frequencydown.rise(&frequencydecrease);
-
- // Thread to turn shutoff valve on/off
- update_shutoff_t.set_priority(osPriorityHigh);
- update_shutoff_t.start(update_shutoff);
+ //Thread to execute injector valve control
+ Injector_Valve_Control.set_priority(osPriorityHigh);
+ Injector_Valve_Control.start(injectorvalvecontrol);
+//--------------------------------------------
// Thread to poll pressure sensors
update_pressures_t.set_priority(osPriorityNormal);
- update_pressures_t.start(update_pressures);
-
- // Thread to poll airflow sensor
- update_airflow_t.set_priority(osPriorityNormal);
- update_airflow_t.start(update_airflow);
+ update_pressures_t.start(update_pressures);
- // Thread to poll level sensor
- //update_level_t.set_priority(osPriorityIdle);
- //update_level_t.start(update_level);
-
- // Thread to update lcd
- update_lcd_t.set_priority(osPriorityIdle);
- update_lcd_t.start(update_lcd);
+ // Thread to poll flow sensor
+ update_flow1_t.set_priority(osPriorityNormal);
+ update_flow1_t.start(update_flow1);
+
+ //Thread to poll flow sensor
+ update_flow2_t.set_priority(osPriorityNormal);
+ update_flow2_t.start(update_flow2);
// Thread to send process values to serial port
print_process_values_t.set_priority(osPriorityLow);
print_process_values_t.start(&print_process_values);
while (true) {
- //pc.printf("%.02fkPa %.02fpsi %.02fC %.02fF\r\n", pumpPressure.pressureKPA, pumpPressure.pressurePSI, pumpPressure.temperatureC, pumpPressure.temperatureF);
- if((double)pot1 >= 0.1) {
- injector.on();
- }
- //pc.printf("shutoff on\r\n");
- Thread::wait(5);
-
- injector.off();
- //pc.printf("shutoff off\r\n");*/
- Thread::wait(495);
+ pump_tach_update();
+
}
}
