Koos van der Wat
/
DPTimer_NormalScreen_8R_DIP_4_20mA_In
Dryer timer with analogue input from a dew point sensor.
main.cpp@4:e8ba2070b69e, 2021-01-23 (annotated)
- Committer:
- koosvanderwat
- Date:
- Sat Jan 23 08:11:57 2021 +0000
- Revision:
- 4:e8ba2070b69e
- Parent:
- 3:559e8c72212a
Dewpoint sensor range 0 to -100
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
koosvanderwat | 4:e8ba2070b69e | 1 | //Import Libraries |
simon | 0:334327d1a416 | 2 | #include "mbed.h" |
simon | 0:334327d1a416 | 3 | #include "TextLCD.h" |
koosvanderwat | 3:559e8c72212a | 4 | #include "Watchdog.h" |
koosvanderwat | 3:559e8c72212a | 5 | #include "millis.h" |
simon | 0:334327d1a416 | 6 | |
koosvanderwat | 3:559e8c72212a | 7 | //Dryer Cycle |
koosvanderwat | 3:559e8c72212a | 8 | int PT = 120; // Purge time in seconds |
koosvanderwat | 3:559e8c72212a | 9 | int RT = 60; // Repressurisation time in seconds |
koosvanderwat | 4:e8ba2070b69e | 10 | int IdleTimeHrs = 12; // cycle activated every x hours to lubricate valves. |
koosvanderwat | 4:e8ba2070b69e | 11 | int LCycles = 2; //Number of lubication cycles |
koosvanderwat | 3:559e8c72212a | 12 | |
koosvanderwat | 3:559e8c72212a | 13 | //Dew Point Setpoint |
koosvanderwat | 4:e8ba2070b69e | 14 | float SetPoint = -40; // Dew Point Set Point |
koosvanderwat | 3:559e8c72212a | 15 | |
koosvanderwat | 3:559e8c72212a | 16 | //Watchdog |
koosvanderwat | 3:559e8c72212a | 17 | Watchdog wd; |
koosvanderwat | 3:559e8c72212a | 18 | |
koosvanderwat | 3:559e8c72212a | 19 | //Screen Setup |
koosvanderwat | 3:559e8c72212a | 20 | TextLCD lcd(D6, D9, D2, D3, D4, D5); // rs, e, d4-d7 |
koosvanderwat | 3:559e8c72212a | 21 | |
koosvanderwat | 4:e8ba2070b69e | 22 | //Define clock |
koosvanderwat | 3:559e8c72212a | 23 | Ticker timeKeeping; |
koosvanderwat | 3:559e8c72212a | 24 | |
koosvanderwat | 3:559e8c72212a | 25 | //Pin Allocation |
koosvanderwat | 3:559e8c72212a | 26 | DigitalOut my_RHPV(A0); |
koosvanderwat | 3:559e8c72212a | 27 | DigitalOut my_RHMV(A1); |
koosvanderwat | 3:559e8c72212a | 28 | DigitalOut my_RV(A2); |
koosvanderwat | 3:559e8c72212a | 29 | DigitalOut my_LHMV(A6); |
koosvanderwat | 3:559e8c72212a | 30 | DigitalOut my_LHPV(A7); |
koosvanderwat | 3:559e8c72212a | 31 | DigitalOut my_led(D13); |
koosvanderwat | 3:559e8c72212a | 32 | DigitalIn my_Dip2(D11); //Dip 2 |
koosvanderwat | 3:559e8c72212a | 33 | DigitalIn my_Dip1(D12); //Dip 1 |
koosvanderwat | 3:559e8c72212a | 34 | AnalogIn DP_In(A3); |
koosvanderwat | 3:559e8c72212a | 35 | |
koosvanderwat | 4:e8ba2070b69e | 36 | //Counters |
koosvanderwat | 3:559e8c72212a | 37 | unsigned long previousMillis = 0; // will store last time LED was updated |
koosvanderwat | 3:559e8c72212a | 38 | long OnTime = 1000; // milliseconds of on-time |
koosvanderwat | 4:e8ba2070b69e | 39 | int secondscounter = 0; // counts the seconds of the cycle |
koosvanderwat | 4:e8ba2070b69e | 40 | int Counter = 0; // used to reset the screen every 10 seconds |
koosvanderwat | 4:e8ba2070b69e | 41 | int Cycledryercounter = 0; // used to cycle the dryer for 5 cycles if the dryer has been idle for 24hrs. |
koosvanderwat | 4:e8ba2070b69e | 42 | int Idlecounter = 0; // used to accumulate the cummulative idle time. |
koosvanderwat | 4:e8ba2070b69e | 43 | int Valuecounter = 0; // used to calculate the weighted average of the dewpoint. |
koosvanderwat | 4:e8ba2070b69e | 44 | //int IdleTimeSeconds = 180; //idle time in seconds |
koosvanderwat | 4:e8ba2070b69e | 45 | int IdleTimeSeconds = IdleTimeHrs * 60 * 60; //idle time in seconds |
koosvanderwat | 4:e8ba2070b69e | 46 | int LCycleseconds = LCycles * 360 - 20; // Lubrication cycles in seconds |
koosvanderwat | 3:559e8c72212a | 47 | |
koosvanderwat | 4:e8ba2070b69e | 48 | //Variables |
koosvanderwat | 4:e8ba2070b69e | 49 | int LHCT = PT + RT; // LH cycle time |
koosvanderwat | 4:e8ba2070b69e | 50 | int RHPT = PT + RT + PT; // RH purge time |
koosvanderwat | 4:e8ba2070b69e | 51 | int CT = PT + RT + PT + RT; // Cycle Time |
koosvanderwat | 4:e8ba2070b69e | 52 | float RHValue = 0; //RH from dew point sensor |
koosvanderwat | 4:e8ba2070b69e | 53 | float TempValue = 0; //Temp from dew point sensor |
koosvanderwat | 4:e8ba2070b69e | 54 | float DewPoint = 0; //Calculated dew point |
koosvanderwat | 4:e8ba2070b69e | 55 | float Value1 = 0; //first sensor reading |
koosvanderwat | 4:e8ba2070b69e | 56 | float Value2 = 0; //second sensor reading |
koosvanderwat | 4:e8ba2070b69e | 57 | float Value3 = 0; //third sensor reading |
koosvanderwat | 3:559e8c72212a | 58 | |
koosvanderwat | 3:559e8c72212a | 59 | int main() |
koosvanderwat | 3:559e8c72212a | 60 | { |
koosvanderwat | 3:559e8c72212a | 61 | |
koosvanderwat | 4:e8ba2070b69e | 62 | //This piece of code runs once at start-up: |
koosvanderwat | 4:e8ba2070b69e | 63 | //________________________________________ |
koosvanderwat | 4:e8ba2070b69e | 64 | |
koosvanderwat | 3:559e8c72212a | 65 | my_RHMV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 66 | my_LHMV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 67 | my_RHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 68 | my_LHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 69 | my_RHPV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 70 | my_LHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 71 | my_RV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 72 | |
koosvanderwat | 3:559e8c72212a | 73 | wd.Configure(4.0); |
koosvanderwat | 3:559e8c72212a | 74 | |
koosvanderwat | 3:559e8c72212a | 75 | wait_ms(100); |
koosvanderwat | 3:559e8c72212a | 76 | lcd.printf("TegnonEfficiency\n"); |
koosvanderwat | 3:559e8c72212a | 77 | lcd.locate(0,1); |
koosvanderwat | 3:559e8c72212a | 78 | lcd.printf(" DP Control \n"); |
koosvanderwat | 3:559e8c72212a | 79 | |
koosvanderwat | 3:559e8c72212a | 80 | wait_ms(1000); |
koosvanderwat | 3:559e8c72212a | 81 | lcd.cls(); |
koosvanderwat | 3:559e8c72212a | 82 | lcd.printf("Dew Point:"); |
koosvanderwat | 3:559e8c72212a | 83 | lcd.locate(0,1); |
koosvanderwat | 3:559e8c72212a | 84 | lcd.printf("Set Point:"); |
koosvanderwat | 3:559e8c72212a | 85 | |
koosvanderwat | 3:559e8c72212a | 86 | millisStart(); |
koosvanderwat | 3:559e8c72212a | 87 | |
koosvanderwat | 3:559e8c72212a | 88 | while(1) { |
koosvanderwat | 3:559e8c72212a | 89 | |
koosvanderwat | 4:e8ba2070b69e | 90 | //This piece of code runs every millisecond for ever: |
koosvanderwat | 4:e8ba2070b69e | 91 | //___________________________________________________ |
koosvanderwat | 3:559e8c72212a | 92 | |
koosvanderwat | 3:559e8c72212a | 93 | |
koosvanderwat | 4:e8ba2070b69e | 94 | unsigned long currentMillis = millis(); // Get current time |
koosvanderwat | 3:559e8c72212a | 95 | |
koosvanderwat | 4:e8ba2070b69e | 96 | if(Cycledryercounter >= 1) { |
koosvanderwat | 4:e8ba2070b69e | 97 | SetPoint = -110; |
koosvanderwat | 3:559e8c72212a | 98 | |
koosvanderwat | 4:e8ba2070b69e | 99 | } else { |
koosvanderwat | 4:e8ba2070b69e | 100 | if(my_Dip2 ==0) { |
koosvanderwat | 4:e8ba2070b69e | 101 | if(my_Dip1 ==0) { |
koosvanderwat | 4:e8ba2070b69e | 102 | SetPoint = -20; |
koosvanderwat | 4:e8ba2070b69e | 103 | } |
koosvanderwat | 4:e8ba2070b69e | 104 | if(my_Dip1 ==1) { |
koosvanderwat | 4:e8ba2070b69e | 105 | SetPoint = -40; |
koosvanderwat | 4:e8ba2070b69e | 106 | } |
koosvanderwat | 3:559e8c72212a | 107 | } |
koosvanderwat | 4:e8ba2070b69e | 108 | if(my_Dip2 ==1) { |
koosvanderwat | 4:e8ba2070b69e | 109 | if(my_Dip1 ==0) { |
koosvanderwat | 4:e8ba2070b69e | 110 | SetPoint = -60; |
koosvanderwat | 4:e8ba2070b69e | 111 | } |
koosvanderwat | 4:e8ba2070b69e | 112 | if(my_Dip1 ==1) { |
koosvanderwat | 4:e8ba2070b69e | 113 | SetPoint = -80; |
koosvanderwat | 4:e8ba2070b69e | 114 | } |
koosvanderwat | 3:559e8c72212a | 115 | } |
koosvanderwat | 3:559e8c72212a | 116 | } |
koosvanderwat | 3:559e8c72212a | 117 | |
koosvanderwat | 3:559e8c72212a | 118 | if (secondscounter < PT) { |
koosvanderwat | 3:559e8c72212a | 119 | my_RHMV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 120 | my_LHMV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 121 | my_RHPV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 122 | my_LHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 123 | my_RV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 124 | } |
koosvanderwat | 3:559e8c72212a | 125 | if (secondscounter >= PT && secondscounter < LHCT) { |
koosvanderwat | 3:559e8c72212a | 126 | my_RHMV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 127 | my_LHMV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 128 | my_RHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 129 | my_LHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 130 | my_RV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 131 | |
koosvanderwat | 3:559e8c72212a | 132 | } |
koosvanderwat | 3:559e8c72212a | 133 | |
koosvanderwat | 4:e8ba2070b69e | 134 | if ((secondscounter > LHCT) && (secondscounter < RHPT)) { |
koosvanderwat | 3:559e8c72212a | 135 | my_RHMV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 136 | my_LHMV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 137 | my_RHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 138 | my_LHPV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 139 | my_RV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 140 | } |
koosvanderwat | 4:e8ba2070b69e | 141 | if (secondscounter >= RHPT && (secondscounter < CT)) { |
koosvanderwat | 3:559e8c72212a | 142 | my_RHMV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 143 | my_LHMV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 144 | my_RHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 145 | my_LHPV = 0;//1 |
koosvanderwat | 3:559e8c72212a | 146 | my_RV = 1;//0 |
koosvanderwat | 3:559e8c72212a | 147 | } |
koosvanderwat | 3:559e8c72212a | 148 | |
koosvanderwat | 4:e8ba2070b69e | 149 | //This piece of code runs every second for ever: |
koosvanderwat | 4:e8ba2070b69e | 150 | //______________________________________________ |
koosvanderwat | 4:e8ba2070b69e | 151 | |
koosvanderwat | 4:e8ba2070b69e | 152 | if ((currentMillis - previousMillis) >= OnTime) { |
koosvanderwat | 4:e8ba2070b69e | 153 | previousMillis = currentMillis; |
koosvanderwat | 4:e8ba2070b69e | 154 | wd.Service(); |
koosvanderwat | 4:e8ba2070b69e | 155 | my_led = !my_led; |
koosvanderwat | 4:e8ba2070b69e | 156 | |
koosvanderwat | 4:e8ba2070b69e | 157 | secondscounter = secondscounter + 1; |
koosvanderwat | 4:e8ba2070b69e | 158 | Counter = Counter + 1; |
koosvanderwat | 4:e8ba2070b69e | 159 | |
koosvanderwat | 4:e8ba2070b69e | 160 | if(Cycledryercounter >= 1) { |
koosvanderwat | 4:e8ba2070b69e | 161 | Cycledryercounter = Cycledryercounter + 1; |
koosvanderwat | 4:e8ba2070b69e | 162 | } |
koosvanderwat | 4:e8ba2070b69e | 163 | |
koosvanderwat | 4:e8ba2070b69e | 164 | if(Counter == 10) { |
koosvanderwat | 4:e8ba2070b69e | 165 | lcd.cls(); |
koosvanderwat | 4:e8ba2070b69e | 166 | lcd.printf("Dew Point:"); |
koosvanderwat | 4:e8ba2070b69e | 167 | lcd.locate(0,1); |
koosvanderwat | 4:e8ba2070b69e | 168 | lcd.printf("Set Point:"); |
koosvanderwat | 4:e8ba2070b69e | 169 | Counter = 0; |
koosvanderwat | 4:e8ba2070b69e | 170 | } |
koosvanderwat | 4:e8ba2070b69e | 171 | |
koosvanderwat | 4:e8ba2070b69e | 172 | // if(Valuecounter ==0) { |
koosvanderwat | 4:e8ba2070b69e | 173 | // Value1 = DP_In.read()*100 - 80; |
koosvanderwat | 4:e8ba2070b69e | 174 | //} |
koosvanderwat | 4:e8ba2070b69e | 175 | |
koosvanderwat | 4:e8ba2070b69e | 176 | //if(Valuecounter ==1) { |
koosvanderwat | 4:e8ba2070b69e | 177 | // Value2 = DP_In.read()*100 - 80; |
koosvanderwat | 4:e8ba2070b69e | 178 | //} |
koosvanderwat | 4:e8ba2070b69e | 179 | |
koosvanderwat | 4:e8ba2070b69e | 180 | //if(Valuecounter ==2) { |
koosvanderwat | 4:e8ba2070b69e | 181 | // Value3 = DP_In.read()*100 - 80; |
koosvanderwat | 4:e8ba2070b69e | 182 | //} |
koosvanderwat | 4:e8ba2070b69e | 183 | |
koosvanderwat | 4:e8ba2070b69e | 184 | //Valuecounter = Valuecounter +1; |
koosvanderwat | 4:e8ba2070b69e | 185 | |
koosvanderwat | 4:e8ba2070b69e | 186 | DewPoint = DP_In.read()*100 - 100; |
koosvanderwat | 4:e8ba2070b69e | 187 | |
koosvanderwat | 4:e8ba2070b69e | 188 | lcd.locate(10,0); |
koosvanderwat | 4:e8ba2070b69e | 189 | lcd.printf(" "); |
koosvanderwat | 4:e8ba2070b69e | 190 | lcd.locate(10,0); |
koosvanderwat | 4:e8ba2070b69e | 191 | lcd.printf("%3.1f%", DewPoint); |
koosvanderwat | 4:e8ba2070b69e | 192 | lcd.locate(10,1); |
koosvanderwat | 4:e8ba2070b69e | 193 | lcd.printf(" "); |
koosvanderwat | 4:e8ba2070b69e | 194 | lcd.locate(10,1); |
koosvanderwat | 4:e8ba2070b69e | 195 | lcd.printf("%3.1f%", SetPoint); |
koosvanderwat | 4:e8ba2070b69e | 196 | |
koosvanderwat | 4:e8ba2070b69e | 197 | |
koosvanderwat | 4:e8ba2070b69e | 198 | //Delay cycle if the Dewpoint is lower than the setpoint: |
koosvanderwat | 4:e8ba2070b69e | 199 | //_______________________________________________________ |
koosvanderwat | 4:e8ba2070b69e | 200 | |
koosvanderwat | 4:e8ba2070b69e | 201 | if ((DewPoint < SetPoint) && (secondscounter == LHCT)) { |
koosvanderwat | 4:e8ba2070b69e | 202 | secondscounter = secondscounter - 1; |
koosvanderwat | 4:e8ba2070b69e | 203 | Idlecounter = Idlecounter + 1; |
koosvanderwat | 4:e8ba2070b69e | 204 | } |
koosvanderwat | 4:e8ba2070b69e | 205 | |
koosvanderwat | 4:e8ba2070b69e | 206 | if ((DewPoint < SetPoint) && (secondscounter == CT)) { |
koosvanderwat | 4:e8ba2070b69e | 207 | secondscounter = secondscounter - 1; |
koosvanderwat | 4:e8ba2070b69e | 208 | Idlecounter = Idlecounter + 1; |
koosvanderwat | 4:e8ba2070b69e | 209 | } |
koosvanderwat | 4:e8ba2070b69e | 210 | |
koosvanderwat | 4:e8ba2070b69e | 211 | if (DewPoint >= SetPoint) { |
koosvanderwat | 4:e8ba2070b69e | 212 | Idlecounter = 0; |
koosvanderwat | 4:e8ba2070b69e | 213 | }; |
koosvanderwat | 4:e8ba2070b69e | 214 | |
koosvanderwat | 4:e8ba2070b69e | 215 | //Set Counters: |
koosvanderwat | 4:e8ba2070b69e | 216 | //____________ |
koosvanderwat | 4:e8ba2070b69e | 217 | |
koosvanderwat | 4:e8ba2070b69e | 218 | if(Idlecounter == IdleTimeSeconds) { |
koosvanderwat | 4:e8ba2070b69e | 219 | Cycledryercounter = 1; |
koosvanderwat | 4:e8ba2070b69e | 220 | } |
koosvanderwat | 4:e8ba2070b69e | 221 | |
koosvanderwat | 4:e8ba2070b69e | 222 | if(Cycledryercounter == LCycleseconds) { |
koosvanderwat | 4:e8ba2070b69e | 223 | Cycledryercounter = 0; |
koosvanderwat | 4:e8ba2070b69e | 224 | } |
koosvanderwat | 4:e8ba2070b69e | 225 | |
koosvanderwat | 4:e8ba2070b69e | 226 | if(Valuecounter == 2) { |
koosvanderwat | 4:e8ba2070b69e | 227 | Valuecounter = 0; |
koosvanderwat | 4:e8ba2070b69e | 228 | } |
koosvanderwat | 4:e8ba2070b69e | 229 | |
koosvanderwat | 4:e8ba2070b69e | 230 | if (secondscounter == (CT + 1)) { |
koosvanderwat | 4:e8ba2070b69e | 231 | secondscounter = 0; |
koosvanderwat | 4:e8ba2070b69e | 232 | } |
koosvanderwat | 4:e8ba2070b69e | 233 | |
koosvanderwat | 4:e8ba2070b69e | 234 | } // Loop for every second |
koosvanderwat | 4:e8ba2070b69e | 235 | } // While(1) - Every millisecond |
koosvanderwat | 4:e8ba2070b69e | 236 | } //Void Main - Once |