Koos van der Wat / Mbed 2 deprecated DPTimer_NormalScreen_8R_DIP_4-20mA_Out

Dependencies:   mbed HYT Watchdog TextLCD Millis

Committer:
koosvanderwat
Date:
Fri Nov 29 10:06:55 2019 +0000
Revision:
3:bbd271c944a0
Parent:
2:ad0b044d0a10
Child:
4:6c83f83dde87
Dryer timer with dew point control and 4-20mA output signal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:334327d1a416 1 #include "mbed.h"
simon 0:334327d1a416 2 #include "TextLCD.h"
koosvanderwat 3:bbd271c944a0 3 #include "HYT.h"
koosvanderwat 3:bbd271c944a0 4 #include "Watchdog.h"
koosvanderwat 3:bbd271c944a0 5 #include "millis.h"
simon 0:334327d1a416 6
koosvanderwat 3:bbd271c944a0 7 int PT = 120; // Purge time in seconds
koosvanderwat 3:bbd271c944a0 8 int RT = 60; // Repressurisation time in seconds
koosvanderwat 3:bbd271c944a0 9 float SetPoint = -3; // Dew Point Set Point
koosvanderwat 3:bbd271c944a0 10 int ClimateControl = 0; // Switch On Climate Control
koosvanderwat 3:bbd271c944a0 11 float DewPointSuppresion = 20; // Set Dew Point Suppression
koosvanderwat 3:bbd271c944a0 12
koosvanderwat 3:bbd271c944a0 13 //Watchdog
koosvanderwat 3:bbd271c944a0 14 Watchdog wd;
koosvanderwat 3:bbd271c944a0 15
koosvanderwat 3:bbd271c944a0 16 HYT SENSOR (D0,D1); //Nano (SDA,SCL) (D0,D1) (D4,D5)
koosvanderwat 3:bbd271c944a0 17 TextLCD lcd(D6, D9, D2, D3, D4, D5); // rs, e, d4-d7
koosvanderwat 3:bbd271c944a0 18
koosvanderwat 3:bbd271c944a0 19 Ticker timeKeeping;
koosvanderwat 3:bbd271c944a0 20
koosvanderwat 3:bbd271c944a0 21 DigitalOut my_RHPV(A0);
koosvanderwat 3:bbd271c944a0 22 DigitalOut my_RHMV(A1);
koosvanderwat 3:bbd271c944a0 23 DigitalOut my_RV(A2);
koosvanderwat 3:bbd271c944a0 24 DigitalOut my_LHMV(A6);
koosvanderwat 3:bbd271c944a0 25 DigitalOut my_LHPV(A7);
koosvanderwat 3:bbd271c944a0 26 DigitalOut my_led(D13);
koosvanderwat 3:bbd271c944a0 27 DigitalIn my_Dip2(D11); //Dip 2
koosvanderwat 3:bbd271c944a0 28 DigitalIn my_Dip1(D12); //Dip 1
koosvanderwat 3:bbd271c944a0 29 AnalogOut DP_Out(A3);
koosvanderwat 3:bbd271c944a0 30
koosvanderwat 3:bbd271c944a0 31 float NewSetPoint = 0;
koosvanderwat 3:bbd271c944a0 32 int CheckSensor = 1;
koosvanderwat 3:bbd271c944a0 33 unsigned long previousMillis = 0; // will store last time LED was updated
koosvanderwat 3:bbd271c944a0 34 long OnTime = 1000; // milliseconds of on-time
koosvanderwat 3:bbd271c944a0 35 int secondscounter = 0;
koosvanderwat 3:bbd271c944a0 36 int Counter = 0;
koosvanderwat 3:bbd271c944a0 37 int sensorbroken =0;
koosvanderwat 3:bbd271c944a0 38
koosvanderwat 3:bbd271c944a0 39 int LHCT = PT + RT; // LH cycle time
koosvanderwat 3:bbd271c944a0 40 int LHPT = PT + RT + PT; // LH purge time
koosvanderwat 3:bbd271c944a0 41 int CT = PT + RT + PT + RT; // Cycle Time
koosvanderwat 3:bbd271c944a0 42
koosvanderwat 3:bbd271c944a0 43 float RHValue = 0;
koosvanderwat 3:bbd271c944a0 44 float TempValue = 0;
koosvanderwat 3:bbd271c944a0 45 float A = 0;
koosvanderwat 3:bbd271c944a0 46 float DewPoint = 0;
koosvanderwat 3:bbd271c944a0 47
koosvanderwat 3:bbd271c944a0 48 int main()
koosvanderwat 3:bbd271c944a0 49 {
koosvanderwat 3:bbd271c944a0 50
koosvanderwat 3:bbd271c944a0 51 my_RHMV = 1;//0
koosvanderwat 3:bbd271c944a0 52 my_LHMV = 0;//1
koosvanderwat 3:bbd271c944a0 53 my_RHPV = 0;//1
koosvanderwat 3:bbd271c944a0 54 my_LHPV = 0;//1
koosvanderwat 3:bbd271c944a0 55 my_RHPV = 1;//0
koosvanderwat 3:bbd271c944a0 56 my_LHPV = 0;//1
koosvanderwat 3:bbd271c944a0 57 my_RV = 0;//1
koosvanderwat 3:bbd271c944a0 58
koosvanderwat 3:bbd271c944a0 59 wd.Configure(4.0);
koosvanderwat 3:bbd271c944a0 60
koosvanderwat 3:bbd271c944a0 61 wait_ms(100);
koosvanderwat 3:bbd271c944a0 62
koosvanderwat 3:bbd271c944a0 63 lcd.printf("TegnonEfficiency\n");
koosvanderwat 3:bbd271c944a0 64
koosvanderwat 3:bbd271c944a0 65 lcd.locate(0,1);
koosvanderwat 3:bbd271c944a0 66 if (ClimateControl == 1) {
koosvanderwat 3:bbd271c944a0 67 lcd.printf("Climate Control \n");
koosvanderwat 3:bbd271c944a0 68 } else {
koosvanderwat 3:bbd271c944a0 69 lcd.printf(" DP Control \n");
koosvanderwat 3:bbd271c944a0 70 }
koosvanderwat 3:bbd271c944a0 71
koosvanderwat 3:bbd271c944a0 72 wait_ms(1000);
koosvanderwat 3:bbd271c944a0 73 lcd.cls();
koosvanderwat 3:bbd271c944a0 74 lcd.printf("DP:");
koosvanderwat 3:bbd271c944a0 75 lcd.locate(9,0);
koosvanderwat 3:bbd271c944a0 76 lcd.printf("S:");
koosvanderwat 3:bbd271c944a0 77 lcd.locate(0,1);
koosvanderwat 3:bbd271c944a0 78 lcd.printf("RH:");
koosvanderwat 3:bbd271c944a0 79 lcd.locate(9,1);
koosvanderwat 3:bbd271c944a0 80 lcd.printf("T:");
koosvanderwat 3:bbd271c944a0 81
koosvanderwat 3:bbd271c944a0 82 millisStart();
koosvanderwat 3:bbd271c944a0 83
koosvanderwat 3:bbd271c944a0 84 while(1) {
koosvanderwat 3:bbd271c944a0 85 unsigned long currentMillis = millis(); // Get current time
koosvanderwat 3:bbd271c944a0 86
koosvanderwat 3:bbd271c944a0 87 if(ClimateControl == 0) {
koosvanderwat 3:bbd271c944a0 88 if(my_Dip2 ==0) {
koosvanderwat 3:bbd271c944a0 89 if(my_Dip1 ==0) {
koosvanderwat 3:bbd271c944a0 90 SetPoint = -3;
koosvanderwat 3:bbd271c944a0 91 }
koosvanderwat 3:bbd271c944a0 92 if(my_Dip1 ==1) {
koosvanderwat 3:bbd271c944a0 93 SetPoint = -20;
koosvanderwat 3:bbd271c944a0 94 }
koosvanderwat 3:bbd271c944a0 95 }
koosvanderwat 3:bbd271c944a0 96 if(my_Dip2 ==1) {
koosvanderwat 3:bbd271c944a0 97 if(my_Dip1 ==0) {
koosvanderwat 3:bbd271c944a0 98 SetPoint = -40;
koosvanderwat 3:bbd271c944a0 99 }
koosvanderwat 3:bbd271c944a0 100 if(my_Dip1 ==1) {
koosvanderwat 3:bbd271c944a0 101 SetPoint = -50;
koosvanderwat 3:bbd271c944a0 102 }
koosvanderwat 3:bbd271c944a0 103 }
koosvanderwat 3:bbd271c944a0 104 }
koosvanderwat 3:bbd271c944a0 105
koosvanderwat 3:bbd271c944a0 106 if ((currentMillis - previousMillis) >= OnTime) {
koosvanderwat 3:bbd271c944a0 107 previousMillis = currentMillis;
koosvanderwat 3:bbd271c944a0 108 wd.Service();
koosvanderwat 3:bbd271c944a0 109 my_led = !my_led;
koosvanderwat 3:bbd271c944a0 110
koosvanderwat 3:bbd271c944a0 111 secondscounter = secondscounter + 1;
koosvanderwat 3:bbd271c944a0 112 Counter = Counter + 1;
simon 0:334327d1a416 113
koosvanderwat 3:bbd271c944a0 114 if(Counter == 10) {
koosvanderwat 3:bbd271c944a0 115 lcd.cls();
koosvanderwat 3:bbd271c944a0 116 lcd.printf("DP:");
koosvanderwat 3:bbd271c944a0 117 lcd.locate(9,0);
koosvanderwat 3:bbd271c944a0 118 lcd.printf("S:");
koosvanderwat 3:bbd271c944a0 119 lcd.locate(0,1);
koosvanderwat 3:bbd271c944a0 120 lcd.printf("RH:");
koosvanderwat 3:bbd271c944a0 121 lcd.locate(9,1);
koosvanderwat 3:bbd271c944a0 122 lcd.printf("T:");
koosvanderwat 3:bbd271c944a0 123 Counter = 0;
koosvanderwat 3:bbd271c944a0 124 }
koosvanderwat 3:bbd271c944a0 125
koosvanderwat 3:bbd271c944a0 126 SENSOR.MRCommand();
koosvanderwat 3:bbd271c944a0 127 wait_ms(100);
koosvanderwat 3:bbd271c944a0 128 SENSOR.DFCommand();
koosvanderwat 3:bbd271c944a0 129 RHValue = (SENSOR.humidity);
koosvanderwat 3:bbd271c944a0 130 TempValue = (SENSOR.temperature);
koosvanderwat 3:bbd271c944a0 131
koosvanderwat 3:bbd271c944a0 132 if(RHValue < 1) {
koosvanderwat 3:bbd271c944a0 133 sensorbroken = 1;
koosvanderwat 3:bbd271c944a0 134 }
koosvanderwat 3:bbd271c944a0 135
koosvanderwat 3:bbd271c944a0 136 if(TempValue < -20) {
koosvanderwat 3:bbd271c944a0 137 sensorbroken = 1;
koosvanderwat 3:bbd271c944a0 138 }
koosvanderwat 3:bbd271c944a0 139
koosvanderwat 3:bbd271c944a0 140 if(sensorbroken == 0) {
koosvanderwat 3:bbd271c944a0 141 A = log( RHValue * 0.01 * pow(10, 7.5*TempValue/(237.2+TempValue) ) );
koosvanderwat 3:bbd271c944a0 142 DewPoint = (23720 * A/(17.269-A))/100;
koosvanderwat 3:bbd271c944a0 143
koosvanderwat 3:bbd271c944a0 144 if (ClimateControl == 1) {
koosvanderwat 3:bbd271c944a0 145 NewSetPoint = TempValue - DewPointSuppresion;
koosvanderwat 3:bbd271c944a0 146
koosvanderwat 3:bbd271c944a0 147 if ( NewSetPoint < SetPoint) {
koosvanderwat 3:bbd271c944a0 148 NewSetPoint = SetPoint;
koosvanderwat 3:bbd271c944a0 149 }
koosvanderwat 3:bbd271c944a0 150
koosvanderwat 3:bbd271c944a0 151 } else {
koosvanderwat 3:bbd271c944a0 152 NewSetPoint = SetPoint;
koosvanderwat 3:bbd271c944a0 153 }
koosvanderwat 3:bbd271c944a0 154 lcd.locate(3,0);
koosvanderwat 3:bbd271c944a0 155 lcd.printf(" ");
koosvanderwat 3:bbd271c944a0 156 lcd.locate(3,0);
koosvanderwat 3:bbd271c944a0 157 lcd.printf("%3.1f%", DewPoint);
koosvanderwat 3:bbd271c944a0 158 lcd.locate(11,0);
koosvanderwat 3:bbd271c944a0 159 lcd.printf(" ");
koosvanderwat 3:bbd271c944a0 160 lcd.locate(11,0);
koosvanderwat 3:bbd271c944a0 161 lcd.printf("%3.1f%", NewSetPoint);
koosvanderwat 3:bbd271c944a0 162 lcd.locate(3,1);
koosvanderwat 3:bbd271c944a0 163 lcd.printf(" ");
koosvanderwat 3:bbd271c944a0 164 lcd.locate(3,1);
koosvanderwat 3:bbd271c944a0 165 lcd.printf("%3.1f%", RHValue);
koosvanderwat 3:bbd271c944a0 166 lcd.locate(11,1);
koosvanderwat 3:bbd271c944a0 167 lcd.printf(" ");
koosvanderwat 3:bbd271c944a0 168 lcd.locate(11,1);
koosvanderwat 3:bbd271c944a0 169 lcd.printf("%.1f%", TempValue);
koosvanderwat 3:bbd271c944a0 170
koosvanderwat 3:bbd271c944a0 171 DP_Out = 0.0104*DewPoint + 0.702;
koosvanderwat 3:bbd271c944a0 172
koosvanderwat 3:bbd271c944a0 173 if ((DewPoint < NewSetPoint) && (secondscounter == LHCT)) {
koosvanderwat 3:bbd271c944a0 174 secondscounter = secondscounter - 1;
koosvanderwat 3:bbd271c944a0 175 }
koosvanderwat 3:bbd271c944a0 176
koosvanderwat 3:bbd271c944a0 177 if ((DewPoint < NewSetPoint) && (secondscounter == CT)) {
koosvanderwat 3:bbd271c944a0 178 secondscounter = secondscounter - 1;
koosvanderwat 3:bbd271c944a0 179 }
koosvanderwat 3:bbd271c944a0 180
koosvanderwat 3:bbd271c944a0 181 } else {
koosvanderwat 3:bbd271c944a0 182 lcd.locate(0,0);
koosvanderwat 3:bbd271c944a0 183 lcd.printf(" Standard ");
koosvanderwat 3:bbd271c944a0 184 lcd.locate(0,1);
koosvanderwat 3:bbd271c944a0 185 lcd.printf(" Cycle ");
koosvanderwat 3:bbd271c944a0 186 DP_Out = 0.1;
koosvanderwat 3:bbd271c944a0 187 }
koosvanderwat 3:bbd271c944a0 188 }
koosvanderwat 3:bbd271c944a0 189
koosvanderwat 3:bbd271c944a0 190 if (secondscounter < PT) {
koosvanderwat 3:bbd271c944a0 191 my_RHMV = 1;//0
koosvanderwat 3:bbd271c944a0 192 my_LHMV = 0;//1
koosvanderwat 3:bbd271c944a0 193 my_RHPV = 1;//0
koosvanderwat 3:bbd271c944a0 194 my_LHPV = 0;//1
koosvanderwat 3:bbd271c944a0 195 my_RV = 0;//1
koosvanderwat 3:bbd271c944a0 196 }
koosvanderwat 3:bbd271c944a0 197 if (secondscounter >= PT && secondscounter < LHCT) {
koosvanderwat 3:bbd271c944a0 198 my_RHMV = 1;//0
koosvanderwat 3:bbd271c944a0 199 my_LHMV = 0;//1
koosvanderwat 3:bbd271c944a0 200 my_RHPV = 0;//1
koosvanderwat 3:bbd271c944a0 201 my_LHPV = 0;//1
koosvanderwat 3:bbd271c944a0 202 my_RV = 1;//0
koosvanderwat 3:bbd271c944a0 203
koosvanderwat 3:bbd271c944a0 204 }
koosvanderwat 3:bbd271c944a0 205
koosvanderwat 3:bbd271c944a0 206 if ((secondscounter > LHCT) && (secondscounter < LHPT)) {
koosvanderwat 3:bbd271c944a0 207 my_RHMV = 0;//1
koosvanderwat 3:bbd271c944a0 208 my_LHMV = 1;//0
koosvanderwat 3:bbd271c944a0 209 my_RHPV = 0;//1
koosvanderwat 3:bbd271c944a0 210 my_LHPV = 1;//0
koosvanderwat 3:bbd271c944a0 211 my_RV = 0;//1
koosvanderwat 3:bbd271c944a0 212
koosvanderwat 3:bbd271c944a0 213 }
koosvanderwat 3:bbd271c944a0 214 if (secondscounter >= LHPT && (secondscounter < CT)) {
koosvanderwat 3:bbd271c944a0 215 my_RHMV = 0;//1
koosvanderwat 3:bbd271c944a0 216 my_LHMV = 1;//0
koosvanderwat 3:bbd271c944a0 217 my_RHPV = 0;//1
koosvanderwat 3:bbd271c944a0 218 my_LHPV = 0;//1
koosvanderwat 3:bbd271c944a0 219 my_RV = 1;//0
koosvanderwat 3:bbd271c944a0 220
koosvanderwat 3:bbd271c944a0 221 }
koosvanderwat 3:bbd271c944a0 222
koosvanderwat 3:bbd271c944a0 223 if (secondscounter == (CT + 1)) {
koosvanderwat 3:bbd271c944a0 224 secondscounter = 0;
koosvanderwat 3:bbd271c944a0 225 }
koosvanderwat 3:bbd271c944a0 226 } // While(1)
koosvanderwat 3:bbd271c944a0 227 } //Void Main