Dryer timer with dew point control and 4-20mA analogue output signal
Dependencies: mbed HYT Watchdog TextLCD Millis
main.cpp
- Committer:
- koosvanderwat
- Date:
- 2021-01-23
- Revision:
- 4:6c83f83dde87
- Parent:
- 3:bbd271c944a0
File content as of revision 4:6c83f83dde87:
#include "mbed.h"
#include "TextLCD.h"
#include "HYT.h"
#include "Watchdog.h"
#include "millis.h"
int PT = 120; // Purge time in seconds
int RT = 60; // Repressurisation time in seconds
float SetPoint = -3; // Dew Point Set Point
int ClimateControl = 0; // Switch On Climate Control
float DewPointSuppresion = 20; // Set Dew Point Suppression
//Watchdog
Watchdog wd;
HYT SENSOR (D0,D1); //Nano (SDA,SCL) (D0,D1) (D4,D5)
TextLCD lcd(D6, D9, D2, D3, D4, D5); // rs, e, d4-d7
Ticker timeKeeping;
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
AnalogOut DP_Out(A3);
float NewSetPoint = 0;
int CheckSensor = 1;
unsigned long previousMillis = 0; // will store last time LED was updated
long OnTime = 1000; // milliseconds of on-time
int secondscounter = 0;
int Counter = 0;
int sensorbroken =0;
int LHCT = PT + RT; // LH cycle time
int LHPT = PT + RT + PT; // LH purge time
int CT = PT + RT + PT + RT; // Cycle Time
float RHValue = 0;
float TempValue = 0;
float A = 0;
float DewPoint = 0;
int main()
{
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);
if (ClimateControl == 1) {
lcd.printf("Climate Control \n");
} else {
lcd.printf(" DP Control \n");
}
wait_ms(1000);
lcd.cls();
lcd.printf("DP:");
lcd.locate(9,0);
lcd.printf("S:");
lcd.locate(0,1);
lcd.printf("RH:");
lcd.locate(9,1);
lcd.printf("T:");
millisStart();
while(1) {
unsigned long currentMillis = millis(); // Get current time
if(ClimateControl == 0) {
if(my_Dip2 ==0) {
if(my_Dip1 ==0) {
SetPoint = -3;
}
if(my_Dip1 ==1) {
SetPoint = -20;
}
}
if(my_Dip2 ==1) {
if(my_Dip1 ==0) {
SetPoint = -40;
}
if(my_Dip1 ==1) {
SetPoint = -50;
}
}
}
if ((currentMillis - previousMillis) >= OnTime) {
previousMillis = currentMillis;
wd.Service();
my_led = !my_led;
secondscounter = secondscounter + 1;
Counter = Counter + 1;
if(Counter == 10) {
lcd.cls();
lcd.printf("DP:");
lcd.locate(9,0);
lcd.printf("S:");
lcd.locate(0,1);
lcd.printf("RH:");
lcd.locate(9,1);
lcd.printf("T:");
Counter = 0;
}
SENSOR.MRCommand();
wait_ms(100);
//SENSOR.DFCommand();
CheckSensor = SENSOR.DFCommand();
RHValue = (SENSOR.humidity);
TempValue = (SENSOR.temperature);
sensorbroken = 0;
if(CheckSensor != 0){
sensorbroken = 1;
}
//if(RHValue < 0.01) {
// sensorbroken = 1;
//}
if(TempValue < -20) {
sensorbroken = 1;
}
if(sensorbroken == 0) {
RHValue = (SENSOR.humidity);
TempValue = (SENSOR.temperature);
if (RHValue != 0){
A = log( RHValue * 0.01 * pow(10, 7.5*TempValue/(237.2+TempValue) ) );
DewPoint = (23720 * A/(17.269-A))/100;
}
if (RHValue == 0){
DewPoint = -50;
}
if(DewPoint > 20){
DewPoint = 20;
}
if(DewPoint < -50){
DewPoint = -50;
}
if (ClimateControl == 1) {
NewSetPoint = TempValue - DewPointSuppresion;
if ( NewSetPoint < SetPoint) {
NewSetPoint = SetPoint;
}
} else {
NewSetPoint = SetPoint;
}
lcd.locate(3,0);
lcd.printf(" ");
lcd.locate(3,0);
lcd.printf("%3.1f%", DewPoint);
lcd.locate(11,0);
lcd.printf(" ");
lcd.locate(11,0);
lcd.printf("%3.1f%", NewSetPoint);
lcd.locate(3,1);
lcd.printf(" ");
lcd.locate(3,1);
lcd.printf("%3.1f%", RHValue);
lcd.locate(11,1);
lcd.printf(" ");
lcd.locate(11,1);
lcd.printf("%.1f%", TempValue);
DP_Out = 0.0104*DewPoint + 0.702; // For dewpoint -50 to 20 with output signal 0.6V to 3V
//DP_Out = 0.0143*DewPoint + 0.714;
if ((DewPoint < NewSetPoint) && (secondscounter == LHCT)) {
secondscounter = secondscounter - 1;
}
if ((DewPoint < NewSetPoint) && (secondscounter == CT)) {
secondscounter = secondscounter - 1;
}
} else {
lcd.locate(0,0);
lcd.printf(" Standard ");
lcd.locate(0,1);
lcd.printf(" Cycle ");
DP_Out = 0.1;
}
}
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 < LHPT)) {
my_RHMV = 0;//1
my_LHMV = 1;//0
my_RHPV = 0;//1
my_LHPV = 1;//0
my_RV = 0;//1
}
if (secondscounter >= LHPT && (secondscounter < CT)) {
my_RHMV = 0;//1
my_LHMV = 1;//0
my_RHPV = 0;//1
my_LHPV = 0;//1
my_RV = 1;//0
}
if (secondscounter == (CT + 1)) {
secondscounter = 0;
}
} // While(1)
} //Void Main