Water control
/
Water_pump
start
general_control.cpp
- Committer:
- BillyGrande
- Date:
- 2017-06-27
- Revision:
- 2:5dd057d67746
- Parent:
- 1:924bead61d21
File content as of revision 2:5dd057d67746:
#include "TextLCD.h" #include "general_control.h" #include "temp.h" Serial pc(USBTX, USBRX); // tx, rx TextLCD lcd(p25, p26, p24, p23, p22, p21); // rs, e, A4-A7 InterruptIn rfl_swt(p6), rsm_htr(p5); //Refill switch, resume heater DigitalOut led1(p28), led2(p29), buzzer(p30); //led1 (Green-normal operation), led2 (under/overflow), buzzer int bC, pw_csv, sw_csv, pwTC, pwTV, swTC, swTV; //Beaker Capacity, Current syringe pure water volume (ml), Current syringe salted water volume (ml), //Pure water tank capacity (ml), Pure water tank volume (ml), Salted water tank capacity (ml), Salted water tank volume (ml) float cbV, air_temp; //Current beaker volume (ml), air temperature (celcius) bool rfl_flag, htr_suspension, vol_state, sal_suspension; //Refill flag, heater suspension flag, state of mixture's volume //Interrupt handlers void refill() { rfl_flag = true; } void resume_operations() { htr_suspension = false; sal_suspension = false; } void change_volume() { char buf[6]; pc.gets(buf, 6); //Get the extra/less volume cbV += (float) atoi(buf); //Apply the change in volume pc.printf("I recieved %s at the change volume function\n", buf); capacity_control(); //Check for over/underflow } //Initialization Functions void set_bC() { char str[6]; pc.gets(str, 6); //Get the extra/less volume bC = atoi(str); pc.printf("Mbed received beaker's capacity: %d ml\n", bC); } void set_cbV() { char str[6]; pc.gets(str, 6); cbV = atof(str); pc.printf("Mbed received current beaker's volume: %.3f ml\n", cbV); } void set_pwTC() { char str[6]; pc.gets(str, 6); pwTC = atoi(str); pc.printf("Mbed received pure water tank's capacity: %d ml\n", pwTC); } void set_pwTV() { //Set pure water tank volume char str[6]; pc.gets(str, 6); pwTV = atoi(str); pc.printf("Mbed received pure water tank's volume: %d ml\n", pwTV); } void set_swTC() { char str[6]; pc.gets(str, 6); swTC = atoi(str); pc.printf("Mbed received pure water tank's capacity: %d ml\n", swTC); } void set_swTV() { char str[6]; pc.gets(str, 6); swTV = atoi(str); pc.printf("Mbed received pure water tank's volume: %d ml\n", swTV); } void initialization() { buzzer = 0; //Silence buzzer pw_csv = SDC; //Syringes start with 25ml deploying water capacity sw_csv = SDC; vol_state=true; //Assume normal starting state rfl_flag = false; //Not refilling atm htr_suspension = false; //No heater suspension sal_suspension = false; //No salinity operations suspended rfl_swt.rise(&refill); //Attach refill switch to respective function rsm_htr.rise(&resume_operations); //Attach resume operations set_bC(); //Set the beaker capacity set_cbV(); //Set current beaker volume set_pwTC(); //Set pure water tank capacity set_pwTV(); //Set pure water tank volume set_swTC(); //Set salted water tank capacity set_swTV(); //Set salted water tank volume air_temp = take_air_temp(); pc.printf("air temp = %.3f\n", air_temp); pc.attach(change_volume); //extra/less volume in the beaker pc.printf("Initialization completed!\n"); } void normality_test(bool sal_state, bool temp_state){ if (sal_state && temp_state && vol_state) {led1=1; led2=0; pc.printf("Normal operation\n");} else {led1=0; led2=1;} } void danger() { led2 = 1; //switch the led on, by setting the output to logic 1 wait(0.1); //wait 0.2 seconds led2 = 0; //switch the led off wait(0.1); buzzer = 1; wait(0.1); buzzer = 0; wait(0.1); } void capacity_control() { if (cbV > bC*BHC) { lcd.cls(); lcd.printf("CBV > 80%% Cap."); lcd.printf("\nAbort operation!"); while(1) { pc.printf("Overflow danger! Current Beaker Volume over 80%% capacity!\nABORT OPERATION!"); danger(); } } if (cbV < bC*BLC) { lcd.cls(); lcd.printf("CBV < 20%% Cap."); lcd.printf("\nAbort operation!"); while(1) { pc.printf("Underflow danger! Current Beaker Volume under 20%% capacity!\nABORT OPERATION!"); danger(); } } pc.printf("Everythink OK with capacity control\n"); }