![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Software for wall mounted dew point sensor
Dependencies: mbed HYT Watchdog TextLCD
main.cpp@3:25b7f448750d, 2019-11-29 (annotated)
- Committer:
- koosvanderwat
- Date:
- Fri Nov 29 10:18:58 2019 +0000
- Revision:
- 3:25b7f448750d
- Parent:
- 2:ad0b044d0a10
No changes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:334327d1a416 | 1 | #include "mbed.h" |
simon | 0:334327d1a416 | 2 | #include "TextLCD.h" |
koosvanderwat | 3:25b7f448750d | 3 | #include "HYT.h" |
koosvanderwat | 3:25b7f448750d | 4 | #include "Watchdog.h" |
simon | 0:334327d1a416 | 5 | |
koosvanderwat | 3:25b7f448750d | 6 | // Setup Hardware |
koosvanderwat | 3:25b7f448750d | 7 | HYT SENSOR (D0,D1); //Nucleo (SDA,SCL) (D0,D1) (D4,D5) |
koosvanderwat | 3:25b7f448750d | 8 | TextLCD lcd(D9, D6, D5, D4, D3, D2); // rs, e, d4-d7 |
koosvanderwat | 3:25b7f448750d | 9 | |
koosvanderwat | 3:25b7f448750d | 10 | // Setup Watchdog |
koosvanderwat | 3:25b7f448750d | 11 | Watchdog wd; |
koosvanderwat | 3:25b7f448750d | 12 | |
koosvanderwat | 3:25b7f448750d | 13 | //Define Pins |
koosvanderwat | 3:25b7f448750d | 14 | AnalogOut AOUT(A3); |
koosvanderwat | 3:25b7f448750d | 15 | DigitalOut my_led(LED1); |
koosvanderwat | 3:25b7f448750d | 16 | DigitalOut Alarm_led(A7); |
koosvanderwat | 3:25b7f448750d | 17 | |
koosvanderwat | 3:25b7f448750d | 18 | //Setup Timer |
koosvanderwat | 3:25b7f448750d | 19 | Ticker timeKeeping; |
koosvanderwat | 3:25b7f448750d | 20 | |
koosvanderwat | 3:25b7f448750d | 21 | //Setup Variables |
koosvanderwat | 3:25b7f448750d | 22 | float Calibration = 0; // RH correction value |
koosvanderwat | 3:25b7f448750d | 23 | float SetPoint = 5; // Max Dew Point in Celsius to trigger alarm. |
koosvanderwat | 3:25b7f448750d | 24 | int Counter = 0; |
koosvanderwat | 3:25b7f448750d | 25 | float RHValue = 0; |
koosvanderwat | 3:25b7f448750d | 26 | float TempValue = 0; |
koosvanderwat | 3:25b7f448750d | 27 | float A = 0; |
koosvanderwat | 3:25b7f448750d | 28 | float DewPoint = -50; |
koosvanderwat | 3:25b7f448750d | 29 | float sample = 0; |
koosvanderwat | 3:25b7f448750d | 30 | float test = 0; |
simon | 0:334327d1a416 | 31 | |
simon | 0:334327d1a416 | 32 | int main() { |
koosvanderwat | 3:25b7f448750d | 33 | //lcd.printf("Hello World5!\n"); |
koosvanderwat | 3:25b7f448750d | 34 | Alarm_led=1; |
koosvanderwat | 3:25b7f448750d | 35 | //lcd.setBacklight(TextLCD::LightOn); |
koosvanderwat | 3:25b7f448750d | 36 | //lcd.setCursor(TextLCD::CurOff_BlkOff); |
koosvanderwat | 3:25b7f448750d | 37 | wd.Configure(4.0); |
koosvanderwat | 3:25b7f448750d | 38 | |
koosvanderwat | 3:25b7f448750d | 39 | wait_ms(100); |
koosvanderwat | 3:25b7f448750d | 40 | |
koosvanderwat | 3:25b7f448750d | 41 | lcd.printf("TegnonEfficiency\n"); |
koosvanderwat | 3:25b7f448750d | 42 | lcd.locate(0,1); |
koosvanderwat | 3:25b7f448750d | 43 | lcd.printf("Dew Point Sensor\n"); |
koosvanderwat | 3:25b7f448750d | 44 | |
koosvanderwat | 3:25b7f448750d | 45 | wait_ms(1000); |
koosvanderwat | 3:25b7f448750d | 46 | |
koosvanderwat | 3:25b7f448750d | 47 | lcd.cls(); |
koosvanderwat | 3:25b7f448750d | 48 | |
koosvanderwat | 3:25b7f448750d | 49 | lcd.printf("Dew Point:"); |
koosvanderwat | 3:25b7f448750d | 50 | lcd.locate(0,1); |
koosvanderwat | 3:25b7f448750d | 51 | lcd.printf("RH:"); |
koosvanderwat | 3:25b7f448750d | 52 | lcd.locate(8,1); |
koosvanderwat | 3:25b7f448750d | 53 | lcd.printf("T:"); |
koosvanderwat | 3:25b7f448750d | 54 | |
koosvanderwat | 3:25b7f448750d | 55 | while(1) { |
koosvanderwat | 3:25b7f448750d | 56 | Counter = Counter + 1; |
koosvanderwat | 3:25b7f448750d | 57 | wait(1); |
koosvanderwat | 3:25b7f448750d | 58 | wd.Service(); |
koosvanderwat | 3:25b7f448750d | 59 | my_led = !my_led; |
koosvanderwat | 3:25b7f448750d | 60 | |
koosvanderwat | 3:25b7f448750d | 61 | if(Counter == 10) |
koosvanderwat | 3:25b7f448750d | 62 | { |
koosvanderwat | 3:25b7f448750d | 63 | lcd.cls(); |
koosvanderwat | 3:25b7f448750d | 64 | lcd.printf("Dew Point:"); |
koosvanderwat | 3:25b7f448750d | 65 | lcd.locate(0,1); |
koosvanderwat | 3:25b7f448750d | 66 | lcd.printf("RH:"); |
koosvanderwat | 3:25b7f448750d | 67 | lcd.locate(8,1); |
koosvanderwat | 3:25b7f448750d | 68 | lcd.printf("T:"); |
koosvanderwat | 3:25b7f448750d | 69 | Counter = 0; |
koosvanderwat | 3:25b7f448750d | 70 | } |
koosvanderwat | 3:25b7f448750d | 71 | |
koosvanderwat | 3:25b7f448750d | 72 | if(DewPoint > SetPoint) { |
koosvanderwat | 3:25b7f448750d | 73 | Alarm_led = !Alarm_led; |
koosvanderwat | 3:25b7f448750d | 74 | } else { |
koosvanderwat | 3:25b7f448750d | 75 | Alarm_led=1; |
koosvanderwat | 3:25b7f448750d | 76 | } |
koosvanderwat | 3:25b7f448750d | 77 | |
koosvanderwat | 3:25b7f448750d | 78 | SENSOR.MRCommand(); |
koosvanderwat | 3:25b7f448750d | 79 | wait_ms(100); |
koosvanderwat | 3:25b7f448750d | 80 | SENSOR.DFCommand(); |
koosvanderwat | 3:25b7f448750d | 81 | wait_ms(100); |
koosvanderwat | 3:25b7f448750d | 82 | |
koosvanderwat | 3:25b7f448750d | 83 | RHValue = (SENSOR.humidity); |
koosvanderwat | 3:25b7f448750d | 84 | TempValue = (SENSOR.temperature); |
koosvanderwat | 3:25b7f448750d | 85 | |
koosvanderwat | 3:25b7f448750d | 86 | if(RHValue > 1) |
koosvanderwat | 3:25b7f448750d | 87 | { |
koosvanderwat | 3:25b7f448750d | 88 | |
koosvanderwat | 3:25b7f448750d | 89 | A = log( RHValue * 0.01 * pow(10, 7.5*TempValue/(237.2+TempValue) ) ); |
koosvanderwat | 3:25b7f448750d | 90 | DewPoint = ( 23720 * A/(17.269-A))/100; |
koosvanderwat | 3:25b7f448750d | 91 | |
koosvanderwat | 3:25b7f448750d | 92 | if(DewPoint < -50) { |
koosvanderwat | 3:25b7f448750d | 93 | DewPoint = -50; |
koosvanderwat | 3:25b7f448750d | 94 | } |
koosvanderwat | 3:25b7f448750d | 95 | |
koosvanderwat | 3:25b7f448750d | 96 | if(DewPoint > 20) { |
koosvanderwat | 3:25b7f448750d | 97 | DewPoint = 20; |
koosvanderwat | 3:25b7f448750d | 98 | } |
koosvanderwat | 3:25b7f448750d | 99 | |
koosvanderwat | 3:25b7f448750d | 100 | test = 0.01428728*DewPoint+0.714364; |
koosvanderwat | 3:25b7f448750d | 101 | |
koosvanderwat | 3:25b7f448750d | 102 | lcd.locate(10,0); |
koosvanderwat | 3:25b7f448750d | 103 | lcd.printf(" "); |
koosvanderwat | 3:25b7f448750d | 104 | lcd.locate(10,0); |
koosvanderwat | 3:25b7f448750d | 105 | lcd.printf("%.1f%", DewPoint); |
koosvanderwat | 3:25b7f448750d | 106 | lcd.printf("C"); |
koosvanderwat | 3:25b7f448750d | 107 | lcd.locate(3,1); |
koosvanderwat | 3:25b7f448750d | 108 | lcd.printf(" "); |
koosvanderwat | 3:25b7f448750d | 109 | lcd.locate(3,1); |
koosvanderwat | 3:25b7f448750d | 110 | lcd.printf("%.1f%", RHValue); |
koosvanderwat | 3:25b7f448750d | 111 | lcd.locate(10,1); |
koosvanderwat | 3:25b7f448750d | 112 | lcd.printf(" "); |
koosvanderwat | 3:25b7f448750d | 113 | lcd.locate(10,1); |
koosvanderwat | 3:25b7f448750d | 114 | lcd.printf("%.1f%", TempValue); |
koosvanderwat | 3:25b7f448750d | 115 | lcd.printf("C\n"); |
koosvanderwat | 3:25b7f448750d | 116 | |
koosvanderwat | 3:25b7f448750d | 117 | AOUT = 0.0142857142857143*DewPoint+0.7142857143; |
koosvanderwat | 3:25b7f448750d | 118 | |
koosvanderwat | 3:25b7f448750d | 119 | } |
koosvanderwat | 3:25b7f448750d | 120 | else |
koosvanderwat | 3:25b7f448750d | 121 | { |
koosvanderwat | 3:25b7f448750d | 122 | AOUT = 0; |
koosvanderwat | 3:25b7f448750d | 123 | lcd.cls(); |
koosvanderwat | 3:25b7f448750d | 124 | wait_ms(1000); |
koosvanderwat | 3:25b7f448750d | 125 | lcd.locate(0,0); |
koosvanderwat | 3:25b7f448750d | 126 | lcd.printf(" Sensor \n"); |
koosvanderwat | 3:25b7f448750d | 127 | lcd.locate(0,1); |
koosvanderwat | 3:25b7f448750d | 128 | lcd.printf(" Error \n"); |
koosvanderwat | 3:25b7f448750d | 129 | } |
koosvanderwat | 3:25b7f448750d | 130 | |
koosvanderwat | 3:25b7f448750d | 131 | } // While(1) |
koosvanderwat | 3:25b7f448750d | 132 | } //Void Main |
koosvanderwat | 3:25b7f448750d | 133 | |
koosvanderwat | 3:25b7f448750d | 134 |