Koos van der Wat
/
DPTimer_NormalScreen_8R_DIP_4_20mA_In
Dryer timer with analogue input from a dew point sensor.
main.cpp
- Committer:
- koosvanderwat
- Date:
- 2021-01-23
- Revision:
- 4:e8ba2070b69e
- Parent:
- 3:559e8c72212a
File content as of revision 4:e8ba2070b69e:
//Import Libraries #include "mbed.h" #include "TextLCD.h" #include "Watchdog.h" #include "millis.h" //Dryer Cycle int PT = 120; // Purge time in seconds int RT = 60; // Repressurisation time in seconds int IdleTimeHrs = 12; // cycle activated every x hours to lubricate valves. int LCycles = 2; //Number of lubication cycles //Dew Point Setpoint float SetPoint = -40; // Dew Point Set Point //Watchdog Watchdog wd; //Screen Setup TextLCD lcd(D6, D9, D2, D3, D4, D5); // rs, e, d4-d7 //Define clock Ticker timeKeeping; //Pin Allocation DigitalOut my_RHPV(A0); DigitalOut my_RHMV(A1); DigitalOut my_RV(A2); DigitalOut my_LHMV(A6); DigitalOut my_LHPV(A7); DigitalOut my_led(D13); DigitalIn my_Dip2(D11); //Dip 2 DigitalIn my_Dip1(D12); //Dip 1 AnalogIn DP_In(A3); //Counters unsigned long previousMillis = 0; // will store last time LED was updated long OnTime = 1000; // milliseconds of on-time int secondscounter = 0; // counts the seconds of the cycle int Counter = 0; // used to reset the screen every 10 seconds int Cycledryercounter = 0; // used to cycle the dryer for 5 cycles if the dryer has been idle for 24hrs. int Idlecounter = 0; // used to accumulate the cummulative idle time. int Valuecounter = 0; // used to calculate the weighted average of the dewpoint. //int IdleTimeSeconds = 180; //idle time in seconds int IdleTimeSeconds = IdleTimeHrs * 60 * 60; //idle time in seconds int LCycleseconds = LCycles * 360 - 20; // Lubrication cycles in seconds //Variables int LHCT = PT + RT; // LH cycle time int RHPT = PT + RT + PT; // RH purge time int CT = PT + RT + PT + RT; // Cycle Time float RHValue = 0; //RH from dew point sensor float TempValue = 0; //Temp from dew point sensor float DewPoint = 0; //Calculated dew point float Value1 = 0; //first sensor reading float Value2 = 0; //second sensor reading float Value3 = 0; //third sensor reading int main() { //This piece of code runs once at start-up: //________________________________________ my_RHMV = 1;//0 my_LHMV = 0;//1 my_RHPV = 0;//1 my_LHPV = 0;//1 my_RHPV = 1;//0 my_LHPV = 0;//1 my_RV = 0;//1 wd.Configure(4.0); wait_ms(100); lcd.printf("TegnonEfficiency\n"); lcd.locate(0,1); lcd.printf(" DP Control \n"); wait_ms(1000); lcd.cls(); lcd.printf("Dew Point:"); lcd.locate(0,1); lcd.printf("Set Point:"); millisStart(); while(1) { //This piece of code runs every millisecond for ever: //___________________________________________________ unsigned long currentMillis = millis(); // Get current time if(Cycledryercounter >= 1) { SetPoint = -110; } else { if(my_Dip2 ==0) { if(my_Dip1 ==0) { SetPoint = -20; } if(my_Dip1 ==1) { SetPoint = -40; } } if(my_Dip2 ==1) { if(my_Dip1 ==0) { SetPoint = -60; } if(my_Dip1 ==1) { SetPoint = -80; } } } if (secondscounter < PT) { my_RHMV = 1;//0 my_LHMV = 0;//1 my_RHPV = 1;//0 my_LHPV = 0;//1 my_RV = 0;//1 } if (secondscounter >= PT && secondscounter < LHCT) { my_RHMV = 1;//0 my_LHMV = 0;//1 my_RHPV = 0;//1 my_LHPV = 0;//1 my_RV = 1;//0 } if ((secondscounter > LHCT) && (secondscounter < RHPT)) { my_RHMV = 0;//1 my_LHMV = 1;//0 my_RHPV = 0;//1 my_LHPV = 1;//0 my_RV = 0;//1 } if (secondscounter >= RHPT && (secondscounter < CT)) { my_RHMV = 0;//1 my_LHMV = 1;//0 my_RHPV = 0;//1 my_LHPV = 0;//1 my_RV = 1;//0 } //This piece of code runs every second for ever: //______________________________________________ if ((currentMillis - previousMillis) >= OnTime) { previousMillis = currentMillis; wd.Service(); my_led = !my_led; secondscounter = secondscounter + 1; Counter = Counter + 1; if(Cycledryercounter >= 1) { Cycledryercounter = Cycledryercounter + 1; } if(Counter == 10) { lcd.cls(); lcd.printf("Dew Point:"); lcd.locate(0,1); lcd.printf("Set Point:"); Counter = 0; } // if(Valuecounter ==0) { // Value1 = DP_In.read()*100 - 80; //} //if(Valuecounter ==1) { // Value2 = DP_In.read()*100 - 80; //} //if(Valuecounter ==2) { // Value3 = DP_In.read()*100 - 80; //} //Valuecounter = Valuecounter +1; DewPoint = DP_In.read()*100 - 100; lcd.locate(10,0); lcd.printf(" "); lcd.locate(10,0); lcd.printf("%3.1f%", DewPoint); lcd.locate(10,1); lcd.printf(" "); lcd.locate(10,1); lcd.printf("%3.1f%", SetPoint); //Delay cycle if the Dewpoint is lower than the setpoint: //_______________________________________________________ if ((DewPoint < SetPoint) && (secondscounter == LHCT)) { secondscounter = secondscounter - 1; Idlecounter = Idlecounter + 1; } if ((DewPoint < SetPoint) && (secondscounter == CT)) { secondscounter = secondscounter - 1; Idlecounter = Idlecounter + 1; } if (DewPoint >= SetPoint) { Idlecounter = 0; }; //Set Counters: //____________ if(Idlecounter == IdleTimeSeconds) { Cycledryercounter = 1; } if(Cycledryercounter == LCycleseconds) { Cycledryercounter = 0; } if(Valuecounter == 2) { Valuecounter = 0; } if (secondscounter == (CT + 1)) { secondscounter = 0; } } // Loop for every second } // While(1) - Every millisecond } //Void Main - Once