Temp Regelaar

Dependencies:   TextLCD mbed DS1307

Committer:
R0375604
Date:
Wed Jan 07 09:40:29 2015 +0000
Revision:
7:52b2a0b4d452
Parent:
6:c95e2d561599
Eindversie Alles is geprogrammeerd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
R0375604 3:b2001b7e5c24 1 // Pieter Essers & Bjorn Vranken GROEP5
R0375604 3:b2001b7e5c24 2 // Digitale Temp Meting en aansturingen via
R0375604 3:b2001b7e5c24 3 // RGB LED // SERVO // RELAIS
R0375604 0:f99036b05ce9 4 #include "mbed.h"
R0375604 0:f99036b05ce9 5 #include "TextLCD.h"
R0375604 3:b2001b7e5c24 6 #include "ds1307.h"
R0375604 0:f99036b05ce9 7
R0375604 0:f99036b05ce9 8 // Declaratie van de Pinnen & variabelen
R0375604 0:f99036b05ce9 9 AnalogIn Temp1(p20);
R0375604 0:f99036b05ce9 10 AnalogIn Temp2(p19);
R0375604 0:f99036b05ce9 11 AnalogIn Temp3(p18);
R0375604 0:f99036b05ce9 12
R0375604 4:15258c48d16f 13 DigitalIn Druk1(p15); // temp1
R0375604 4:15258c48d16f 14 DigitalIn Druk2(p11); // temp2
R0375604 4:15258c48d16f 15 DigitalIn Druk3(p14); // temp3
R0375604 7:52b2a0b4d452 16 DigitalIn Down(p13); // down
R0375604 7:52b2a0b4d452 17 DigitalIn Up(p12); // up
R0375604 0:f99036b05ce9 18
R0375604 1:386b4ee674e3 19 DigitalOut Relais(p29); // pin voor de Relais
R0375604 0:f99036b05ce9 20
R0375604 0:f99036b05ce9 21 PwmOut Servo(p21); // servo motor
R0375604 4:15258c48d16f 22 PwmOut R(p23); // RGB => Rood
R0375604 4:15258c48d16f 23 PwmOut G(p24); // RGB => Groen
R0375604 4:15258c48d16f 24 PwmOut B(p22); // RGB => Blauw
R0375604 0:f99036b05ce9 25 PwmOut LedB(p25); // Blauwe Led als relais Uit is (Te warm)
R0375604 0:f99036b05ce9 26 PwmOut LedG(p26); // Groene Led als relais Uit is (Temp GOED)
R0375604 0:f99036b05ce9 27
R0375604 3:b2001b7e5c24 28 TextLCD lcd(p5, p6, p7, p8, p9, p10); // LCD
R0375604 3:b2001b7e5c24 29 DS1307 my1307(p28,p27); // start DS1307 class and give it pins for connections of the DS1307 device
R0375604 0:f99036b05ce9 30
R0375604 3:b2001b7e5c24 31 int sec;
R0375604 3:b2001b7e5c24 32 int min;
R0375604 3:b2001b7e5c24 33 int hours;
R0375604 3:b2001b7e5c24 34 int day;
R0375604 3:b2001b7e5c24 35 int date;
R0375604 3:b2001b7e5c24 36 int month;
R0375604 3:b2001b7e5c24 37 int year;
R0375604 3:b2001b7e5c24 38
R0375604 3:b2001b7e5c24 39 float InstelTemp1 = 21; // De Gewenste Temperatuur
R0375604 3:b2001b7e5c24 40 float InstelTemp2 = 21;
R0375604 3:b2001b7e5c24 41 float InstelTemp3 = 21;
R0375604 0:f99036b05ce9 42
R0375604 0:f99036b05ce9 43 float temp1 = 0;
R0375604 0:f99036b05ce9 44 float temp2 = 0;
R0375604 0:f99036b05ce9 45 float temp3 = 0;
R0375604 0:f99036b05ce9 46
R0375604 3:b2001b7e5c24 47 //int teller = 0; // om een wachtlus te maken.
R0375604 3:b2001b7e5c24 48 void test_rw(int test) // Test voor de RTC
R0375604 3:b2001b7e5c24 49 {
R0375604 3:b2001b7e5c24 50 }
R0375604 0:f99036b05ce9 51 int main()
R0375604 0:f99036b05ce9 52 {
R0375604 3:b2001b7e5c24 53 lcd.cls(); // LCD Clearen
R0375604 3:b2001b7e5c24 54 R.period_ms(20.0f); // 20 msecond period (50Hz)
R0375604 3:b2001b7e5c24 55 G.period_ms(20.0f); // 20 msecond period (50Hz)
R0375604 0:f99036b05ce9 56 B.period_ms(20.0f); // 20 msecond period
R0375604 1:386b4ee674e3 57 LedB.period_ms(20.0f); // 20 msecond period
R0375604 0:f99036b05ce9 58 LedG.period_ms(20.0f); // 20 msecond period
R0375604 0:f99036b05ce9 59 lcd.cls(); // LCD Clearen
R0375604 0:f99036b05ce9 60
R0375604 0:f99036b05ce9 61 while(1)
R0375604 7:52b2a0b4d452 62 {
R0375604 0:f99036b05ce9 63 float temp1 = 0;
R0375604 0:f99036b05ce9 64 float temp2 = 0;
R0375604 0:f99036b05ce9 65 float temp3 = 0;
R0375604 3:b2001b7e5c24 66 //------------- De Tijd op de LCD printen ------------------------------------
R0375604 3:b2001b7e5c24 67 //------------- Enkel laten zien wanneer je op drukknop drukt-----------------
R0375604 7:52b2a0b4d452 68 while(Down)
R0375604 3:b2001b7e5c24 69 {
R0375604 3:b2001b7e5c24 70 my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year);
R0375604 3:b2001b7e5c24 71 wait(0.5);
R0375604 3:b2001b7e5c24 72 lcd.cls();
R0375604 3:b2001b7e5c24 73 lcd.locate(0,0);
R0375604 3:b2001b7e5c24 74 lcd.printf("%d:%d:%d",hours,min,sec);
R0375604 3:b2001b7e5c24 75 lcd.locate(0,1);
R0375604 3:b2001b7e5c24 76 lcd.printf("%d/%d/%d",date,month,year);
R0375604 3:b2001b7e5c24 77 }
R0375604 1:386b4ee674e3 78 //------------- Gewenste TEMP instellen ------------------------------------
R0375604 0:f99036b05ce9 79 while(Druk1) // Gewenste Temp1 Instellen
R0375604 0:f99036b05ce9 80 {
R0375604 0:f99036b05ce9 81 lcd.locate(0,0);
R0375604 0:f99036b05ce9 82 lcd.printf("Instel Temp1 = ");
R0375604 0:f99036b05ce9 83 lcd.locate(0,1);
R0375604 0:f99036b05ce9 84 lcd.printf("%4.1f C ",InstelTemp1);
R0375604 7:52b2a0b4d452 85 if(Up)
R0375604 0:f99036b05ce9 86 {
R0375604 0:f99036b05ce9 87 InstelTemp1 += 0.5;
R0375604 0:f99036b05ce9 88 lcd.locate(0,0);
R0375604 0:f99036b05ce9 89 lcd.printf("Instel Temp1 = ");
R0375604 0:f99036b05ce9 90 lcd.locate(0,1);
R0375604 0:f99036b05ce9 91 lcd.printf("%4.1f C ",InstelTemp1);
R0375604 0:f99036b05ce9 92 wait(0.5);
R0375604 0:f99036b05ce9 93 }
R0375604 7:52b2a0b4d452 94 else if(Down)
R0375604 0:f99036b05ce9 95 {
R0375604 0:f99036b05ce9 96 InstelTemp1 -= 0.5;
R0375604 0:f99036b05ce9 97 lcd.locate(0,0);
R0375604 0:f99036b05ce9 98 lcd.printf("Instel Temp1 = ");
R0375604 0:f99036b05ce9 99 lcd.locate(0,1);
R0375604 0:f99036b05ce9 100 lcd.printf("%4.1f C ",InstelTemp1);
R0375604 0:f99036b05ce9 101 wait(0.5);
R0375604 0:f99036b05ce9 102 }
R0375604 0:f99036b05ce9 103 }
R0375604 0:f99036b05ce9 104 lcd.cls(); // LCD Clearen
R0375604 0:f99036b05ce9 105 while(Druk2) // Gewenste Temp2 Instellen
R0375604 0:f99036b05ce9 106 {
R0375604 0:f99036b05ce9 107 lcd.locate(0,0);
R0375604 0:f99036b05ce9 108 lcd.printf("Instel Temp2 = ");
R0375604 0:f99036b05ce9 109 lcd.locate(0,1);
R0375604 0:f99036b05ce9 110 lcd.printf("%4.1f C ",InstelTemp2);
R0375604 7:52b2a0b4d452 111 if(Up)
R0375604 0:f99036b05ce9 112 {
R0375604 0:f99036b05ce9 113 InstelTemp2 += 0.5;
R0375604 0:f99036b05ce9 114 lcd.locate(0,0);
R0375604 0:f99036b05ce9 115 lcd.printf("Instel Temp2 = ");
R0375604 0:f99036b05ce9 116 lcd.locate(0,1);
R0375604 0:f99036b05ce9 117 lcd.printf("%4.1f C ",InstelTemp2);
R0375604 0:f99036b05ce9 118 wait(0.5);
R0375604 0:f99036b05ce9 119 }
R0375604 7:52b2a0b4d452 120 else if(Down)
R0375604 0:f99036b05ce9 121 {
R0375604 0:f99036b05ce9 122 InstelTemp2 -= 0.5;
R0375604 0:f99036b05ce9 123 lcd.locate(0,0);
R0375604 0:f99036b05ce9 124 lcd.printf("Instel Temp2 = ");
R0375604 0:f99036b05ce9 125 lcd.locate(0,1);
R0375604 0:f99036b05ce9 126 lcd.printf("%4.1f C ",InstelTemp2);
R0375604 0:f99036b05ce9 127 wait(0.5);
R0375604 0:f99036b05ce9 128 }
R0375604 0:f99036b05ce9 129 }
R0375604 0:f99036b05ce9 130 lcd.cls(); // LCD Clearen
R0375604 0:f99036b05ce9 131 while(Druk3) // Gewenste Temp3 Instellen
R0375604 0:f99036b05ce9 132 {
R0375604 0:f99036b05ce9 133 lcd.locate(0,0);
R0375604 0:f99036b05ce9 134 lcd.printf("Instel Temp3 = ");
R0375604 0:f99036b05ce9 135 lcd.locate(0,1);
R0375604 0:f99036b05ce9 136 lcd.printf("%4.1f C ",InstelTemp3);
R0375604 7:52b2a0b4d452 137 if(Up)
R0375604 0:f99036b05ce9 138 {
R0375604 0:f99036b05ce9 139 InstelTemp3 += 0.5;
R0375604 0:f99036b05ce9 140 lcd.locate(0,0);
R0375604 0:f99036b05ce9 141 lcd.printf("Instel Temp3 = ");
R0375604 0:f99036b05ce9 142 lcd.locate(0,1);
R0375604 0:f99036b05ce9 143 lcd.printf("%4.1f C ",InstelTemp3);
R0375604 0:f99036b05ce9 144 wait(0.5);
R0375604 0:f99036b05ce9 145 }
R0375604 7:52b2a0b4d452 146 else if(Down)
R0375604 0:f99036b05ce9 147 {
R0375604 0:f99036b05ce9 148 InstelTemp3 -= 0.5;
R0375604 0:f99036b05ce9 149 lcd.locate(0,0);
R0375604 0:f99036b05ce9 150 lcd.printf("Instel Temp3 = ");
R0375604 0:f99036b05ce9 151 lcd.locate(0,1);
R0375604 0:f99036b05ce9 152 lcd.printf("%4.1f C ",InstelTemp3);
R0375604 0:f99036b05ce9 153 wait(0.5);
R0375604 0:f99036b05ce9 154 }
R0375604 0:f99036b05ce9 155 }
R0375604 3:b2001b7e5c24 156 //------------------------------------------------------------------------------------
R0375604 0:f99036b05ce9 157 for(int t=0; t<100; t++) // Inlezen van de Temperatuur
R0375604 0:f99036b05ce9 158 {
R0375604 0:f99036b05ce9 159 temp1 = temp1 +Temp1.read(); // Temp1 inlezen
R0375604 0:f99036b05ce9 160 temp2 = temp2 +Temp2.read(); // Temp2 inlezen
R0375604 0:f99036b05ce9 161 temp3 = temp3 +Temp3.read(); // Temp3 inlezen
R0375604 0:f99036b05ce9 162 }
R0375604 0:f99036b05ce9 163
R0375604 5:1c493bae26fc 164 temp1 = (temp1 *3.3) + 3; // Bewerking voor de Temp in graden te bekomen.
R0375604 5:1c493bae26fc 165 temp2 = (temp2 *3.3) + 3;
R0375604 5:1c493bae26fc 166 temp3 = (temp3 *3.3) + 3;
R0375604 1:386b4ee674e3 167 //-------------- LCD Printen----------------------------------------------------------
R0375604 0:f99036b05ce9 168 lcd.locate(0,0); // De ingelezen Temperatuur op de LCD zetten
R0375604 0:f99036b05ce9 169 lcd.printf("Temperatuur 1 = ");
R0375604 0:f99036b05ce9 170 lcd.locate(0,1);
R0375604 0:f99036b05ce9 171 lcd.printf("%4.1f C ",temp1);
R0375604 1:386b4ee674e3 172 wait(1.5);
R0375604 0:f99036b05ce9 173 lcd.cls();
R0375604 0:f99036b05ce9 174 lcd.locate(0,0);
R0375604 0:f99036b05ce9 175 lcd.printf("Temperatuur 2 = ");
R0375604 0:f99036b05ce9 176 lcd.locate(0,1);
R0375604 0:f99036b05ce9 177 lcd.printf("%4.1f C ",temp2);
R0375604 1:386b4ee674e3 178 wait(1.5);
R0375604 0:f99036b05ce9 179 lcd.cls();
R0375604 0:f99036b05ce9 180 lcd.locate(0,0);
R0375604 0:f99036b05ce9 181 lcd.printf("Temperatuur 3 = ");
R0375604 0:f99036b05ce9 182 lcd.locate(0,1);
R0375604 0:f99036b05ce9 183 lcd.printf("%4.1f C ",temp3);
R0375604 1:386b4ee674e3 184 wait(1.5);
R0375604 3:b2001b7e5c24 185 //-----------// RGB => Temperatuur 1// WAARSCHUWIGS SIGNAAL--------------------------------------------------------
R0375604 5:1c493bae26fc 186 //------Naarmate temp verder van gewenste waarde zit een andre RGB kleur--------------
R0375604 5:1c493bae26fc 187 //------------------------Te warme Temp-----------------------------------------------
R0375604 5:1c493bae26fc 188 if(InstelTemp1 + 1 < temp1 && temp1 <= InstelTemp1 + 2)
R0375604 0:f99036b05ce9 189 {
R0375604 5:1c493bae26fc 190 R.write(0.50f); // 50% duty cycle Geel
R0375604 5:1c493bae26fc 191 G.write(0.50f); // 50% duty cycle
R0375604 0:f99036b05ce9 192 B.write(0.00f); // 0% duty cycle
R0375604 5:1c493bae26fc 193 }
R0375604 5:1c493bae26fc 194 else if(InstelTemp1 + 2 < temp1 && temp1 <= InstelTemp1 + 3)
R0375604 5:1c493bae26fc 195 {
R0375604 5:1c493bae26fc 196 R.write(0.75f); // 50% duty cycle Oranje
R0375604 5:1c493bae26fc 197 G.write(0.25f); // 25% duty cycle
R0375604 5:1c493bae26fc 198 B.write(0.00f); // 0% duty cycle
R0375604 5:1c493bae26fc 199 }
R0375604 5:1c493bae26fc 200 else if(InstelTemp1 + 3 < temp1)
R0375604 5:1c493bae26fc 201 {
R0375604 5:1c493bae26fc 202 R.write(0.50f); // 50% duty cycle Rood
R0375604 5:1c493bae26fc 203 G.write(0.00f); // 0% duty cycle
R0375604 5:1c493bae26fc 204 B.write(0.00f); // 0% duty cycle
R0375604 5:1c493bae26fc 205 }
R0375604 5:1c493bae26fc 206 //---------------Te koude temp----------------------------------------------
R0375604 5:1c493bae26fc 207 else if(InstelTemp1 - 1 > temp1 && temp1 >= InstelTemp1 - 2)
R0375604 3:b2001b7e5c24 208 {
R0375604 5:1c493bae26fc 209 R.write(0.00f); // 0% duty cycle Licht blauw
R0375604 5:1c493bae26fc 210 G.write(0.50f); // 50% duty cycle
R0375604 5:1c493bae26fc 211 B.write(0.50f); // 50% duty cycle
R0375604 5:1c493bae26fc 212 }
R0375604 5:1c493bae26fc 213 else if(InstelTemp1 - 2 > temp1 && temp1 >= InstelTemp1 - 3)
R0375604 5:1c493bae26fc 214 {
R0375604 5:1c493bae26fc 215 R.write(0.00f); // 0% duty cycle Paars
R0375604 5:1c493bae26fc 216 G.write(0.25f); // 25% duty cycle
R0375604 5:1c493bae26fc 217 B.write(0.75f); // 75% duty cycle
R0375604 5:1c493bae26fc 218 }
R0375604 6:c95e2d561599 219 else if(InstelTemp1 - 3 > temp1)
R0375604 5:1c493bae26fc 220 {
R0375604 6:c95e2d561599 221 R.write(0.00f); // 0% duty cycle Blauw
R0375604 3:b2001b7e5c24 222 G.write(0.00f); // 0% duty cycle
R0375604 5:1c493bae26fc 223 B.write(0.50f); // 50% duty cycle
R0375604 5:1c493bae26fc 224 }
R0375604 5:1c493bae26fc 225 //-------------Goede Temp-------------------------------------------------
R0375604 0:f99036b05ce9 226 else // Temp is te GOED => Groene led
R0375604 0:f99036b05ce9 227 {
R0375604 0:f99036b05ce9 228 R.write(0.00f); // 0% duty cycle
R0375604 0:f99036b05ce9 229 G.write(0.50f); // 50% duty cycle
R0375604 0:f99036b05ce9 230 B.write(0.00f); // 0% duty cycle
R0375604 1:386b4ee674e3 231 }
R0375604 2:52f7cccebdea 232 //-----------// Relais => Temperatuur 2// Moet met een transistor----------------------------------
R0375604 1:386b4ee674e3 233 if(temp2 > InstelTemp2 + 2) // Temp is te HOOG => Blauwe led
R0375604 1:386b4ee674e3 234 {
R0375604 1:386b4ee674e3 235 Relais = 0; // Temp is te HOOG dus moet afkoelen (Niet verwarmen)
R0375604 1:386b4ee674e3 236 LedB.write(0.50f); // 50% duty cycle
R0375604 1:386b4ee674e3 237 LedG.write(0.00f); // 0% duty cycle
R0375604 1:386b4ee674e3 238
R0375604 1:386b4ee674e3 239 }
R0375604 2:52f7cccebdea 240 else if (temp2 < InstelTemp2 - 2) // Temp is te LAAG => Rode led
R0375604 1:386b4ee674e3 241 {
R0375604 1:386b4ee674e3 242 Relais = 1; // Temp is te LAAG Dus verwarmen
R0375604 3:b2001b7e5c24 243 wait(0.5);
R0375604 2:52f7cccebdea 244 LedB.write(0.00f); // 0% duty cycle
R0375604 2:52f7cccebdea 245 LedG.write(0.00f); // 0% duty cycle
R0375604 1:386b4ee674e3 246 }
R0375604 1:386b4ee674e3 247 else // Temp is te GOED => Groene led
R0375604 1:386b4ee674e3 248 {
R0375604 3:b2001b7e5c24 249 Relais = 0; // Tem is GOED dus niets doen
R0375604 1:386b4ee674e3 250 LedB.write(0.00f); // 0% duty cycle
R0375604 3:b2001b7e5c24 251 LedG.write(0.50f); // 100% duty cycle
R0375604 1:386b4ee674e3 252 }
R0375604 1:386b4ee674e3 253 //-----------// Servo => Temparatur 3 // ------------------------------------------------------------
R0375604 5:1c493bae26fc 254 //---------------------Stappen naar rechts -> Te WARM-----------------------------------------------
R0375604 5:1c493bae26fc 255 if(InstelTemp3 + 1 < temp3 && temp3 <= InstelTemp3 + 2)
R0375604 5:1c493bae26fc 256 {
R0375604 6:c95e2d561599 257 Servo = (110 * 0.000511 + 0.026); // rechts
R0375604 5:1c493bae26fc 258 }
R0375604 5:1c493bae26fc 259 else if(InstelTemp3 + 2 < temp3 && temp3 <= InstelTemp3 + 3)
R0375604 5:1c493bae26fc 260 {
R0375604 6:c95e2d561599 261 Servo = (130 * 0.000511 + 0.026); // rechts
R0375604 5:1c493bae26fc 262 }
R0375604 5:1c493bae26fc 263 else if(InstelTemp3 + 3 < temp3 && temp3 <= InstelTemp3 + 4)
R0375604 5:1c493bae26fc 264 {
R0375604 6:c95e2d561599 265 Servo = (150 * 0.000511 + 0.026); // rechts
R0375604 5:1c493bae26fc 266 }
R0375604 5:1c493bae26fc 267 else if(InstelTemp3 + 4 < temp3)
R0375604 1:386b4ee674e3 268 {
R0375604 1:386b4ee674e3 269 Servo = (170 * 0.000511 + 0.026); // rechts
R0375604 1:386b4ee674e3 270 }
R0375604 5:1c493bae26fc 271 //---------------------Stappen naar links -> Te KOUD-----------------------------------------------
R0375604 5:1c493bae26fc 272 else if(InstelTemp3 - 1 > temp3 && temp3 >= InstelTemp3 - 2)
R0375604 5:1c493bae26fc 273 {
R0375604 6:c95e2d561599 274 Servo = (70 * 0.000511 + 0.026); // links
R0375604 5:1c493bae26fc 275 }
R0375604 5:1c493bae26fc 276 else if(InstelTemp3 - 2 > temp3 && temp3 >= InstelTemp3 - 3)
R0375604 1:386b4ee674e3 277 {
R0375604 6:c95e2d561599 278 Servo = (50 * 0.000511 + 0.026); // links
R0375604 5:1c493bae26fc 279 }
R0375604 5:1c493bae26fc 280 else if(InstelTemp3 - 3 > temp3 && temp3 >= InstelTemp3 - 4)
R0375604 5:1c493bae26fc 281 {
R0375604 6:c95e2d561599 282 Servo = (30 * 0.000511 + 0.026); // links
R0375604 1:386b4ee674e3 283 }
R0375604 5:1c493bae26fc 284 else if(InstelTemp3 - 4 > temp3)
R0375604 5:1c493bae26fc 285 {
R0375604 5:1c493bae26fc 286 Servo = (7 * 0.000511 + 0.026); // links
R0375604 5:1c493bae26fc 287 }
R0375604 5:1c493bae26fc 288 //--------------Temp is goed------------------------------------------------------------
R0375604 1:386b4ee674e3 289 else // Temp is te GOED => Servo Midden
R0375604 1:386b4ee674e3 290 {
R0375604 1:386b4ee674e3 291 Servo = (90 * 0.000511 + 0.026); // rust
R0375604 1:386b4ee674e3 292 }
R0375604 2:52f7cccebdea 293 //--------------------------------------------------------------------------------------------------
R0375604 0:f99036b05ce9 294 }
R0375604 5:1c493bae26fc 295 }