Project verwarmingsregelaar

Dependencies:   DS1307 Servo TextLCD mbed

Fork of Project_02_programma by Robin Bogaerts

Committer:
r0446849
Date:
Thu Dec 18 09:59:33 2014 +0000
Revision:
1:8aada2d4df12
Parent:
0:b0e0ec2415bc
project programma 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
r0446849 0:b0e0ec2415bc 1 //Project_02
r0446849 0:b0e0ec2415bc 2 #include "mbed.h"
r0446849 0:b0e0ec2415bc 3 #include "TextLCD.h"
r0446849 0:b0e0ec2415bc 4 #include "Servo.h"
r0446849 0:b0e0ec2415bc 5 #include "ds1307.h"
r0446849 0:b0e0ec2415bc 6
r0446849 0:b0e0ec2415bc 7 DigitalOut ledr(p5); //RGB led rood
r0446849 0:b0e0ec2415bc 8 DigitalOut ledg(p6); //RGB led groen
r0446849 0:b0e0ec2415bc 9 DigitalOut ledb(p7); //RGB led blauw
r0446849 0:b0e0ec2415bc 10 DigitalOut relais(p8); //Relais
r0446849 0:b0e0ec2415bc 11 DS1307 my1307(p9,p10); //start DS1307 class and give it pins for connections of the DS1307 device
r0446849 0:b0e0ec2415bc 12 InterruptIn push1(p11); //drukknop onder interrupt mogelijk (hoger)
r0446849 0:b0e0ec2415bc 13 InterruptIn push2(p12); //drukknop onder interrupt mogelijk (lager)
r0446849 0:b0e0ec2415bc 14 InterruptIn push3(p13); //drukknop onder interrupt mogelijk (bevestigen)
r0446849 0:b0e0ec2415bc 15 InterruptIn push4(p14); //drukknop onder interrupt mogelijk (anuleren)
r0446849 0:b0e0ec2415bc 16 AnalogIn temp01(p19); //LM35 Binnen
r0446849 0:b0e0ec2415bc 17 AnalogIn temp02(p20); //LM35 Buiten
r0446849 0:b0e0ec2415bc 18 PwmOut myservo(p22); //Servo motor met pwm
r0446849 0:b0e0ec2415bc 19 PwmOut LCDBack(p21); //backlight LCD control
r0446849 0:b0e0ec2415bc 20 TextLCD lcd(p25, p26, p27, p28, p29, p30); //LCD
r0446849 0:b0e0ec2415bc 21
r0446849 0:b0e0ec2415bc 22 float licht=0; //backlight
r0446849 0:b0e0ec2415bc 23 float vorig_licht=0; //backlight onthouden van waarde
r0446849 0:b0e0ec2415bc 24 float i=0; //temperatuur 01
r0446849 0:b0e0ec2415bc 25 float j=0; //temperatuur 02
r0446849 0:b0e0ec2415bc 26 float ingesteld=21; //ingestelde temperatuur
r0446849 0:b0e0ec2415bc 27 float vorige_instelling=21; //ingestelde temperatuur onthouden van waarde
r0446849 0:b0e0ec2415bc 28
r0446849 0:b0e0ec2415bc 29 int sec; //RTC
r0446849 0:b0e0ec2415bc 30 int min; //RTC
r0446849 0:b0e0ec2415bc 31 int hours; //RTC
r0446849 0:b0e0ec2415bc 32 int day; //RTC
r0446849 0:b0e0ec2415bc 33 int date; //RTC
r0446849 0:b0e0ec2415bc 34 int month; //RTC
r0446849 0:b0e0ec2415bc 35 int year; //RTC
r0446849 0:b0e0ec2415bc 36
r0446849 0:b0e0ec2415bc 37 void test_rw(int test) { //RTC Klok
r0446849 0:b0e0ec2415bc 38 }
r0446849 0:b0e0ec2415bc 39
r0446849 0:b0e0ec2415bc 40 void menu(void){
r0446849 0:b0e0ec2415bc 41 lcd.cls(); //Menu load screen (anti dender, als de knop te lang word
r0446849 0:b0e0ec2415bc 42 lcd.locate(0,0); //ingedrukt kan dit per ongeluk al een volgende functie
r0446849 0:b0e0ec2415bc 43 lcd.printf("******Menu******"); //starten vandaar dit load screen om dit te vermijden.
r0446849 0:b0e0ec2415bc 44 lcd.locate(0,1); //men kan ook gewoon een wait plaatsen van een seconde.)
r0446849 0:b0e0ec2415bc 45 lcd.printf("Laden ."); //en clear LCD
r0446849 0:b0e0ec2415bc 46 wait(0.5);
r0446849 0:b0e0ec2415bc 47 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 48 lcd.printf("Laden ..");
r0446849 0:b0e0ec2415bc 49 wait(0.5);
r0446849 0:b0e0ec2415bc 50 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 51 lcd.printf("Laden ...");
r0446849 0:b0e0ec2415bc 52 wait(0.5);
r0446849 0:b0e0ec2415bc 53 while(push4 == 0){ //while anuleren niet is in gedrukt
r0446849 0:b0e0ec2415bc 54 while(push1 == 0 && push2 == 0 && push4 == 0){ //while drukknoppen 1,2 en 4 niet ingedrukt zijn
r0446849 0:b0e0ec2415bc 55 ledr = 0; //aansturing RGB led
r0446849 0:b0e0ec2415bc 56 ledg = 0;
r0446849 0:b0e0ec2415bc 57 ledb = 0;
r0446849 0:b0e0ec2415bc 58 lcd.cls(); //keuze menu weergeven en clear LCD
r0446849 0:b0e0ec2415bc 59 lcd.locate(0,0); //Plaats LCD cursor op de juiste plaats
r0446849 0:b0e0ec2415bc 60 lcd.printf("******Menu******");
r0446849 0:b0e0ec2415bc 61 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 62 lcd.printf("1: Helderheid");
r0446849 0:b0e0ec2415bc 63 wait(1);
r0446849 0:b0e0ec2415bc 64 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 65 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 66 lcd.printf("******Menu******");
r0446849 0:b0e0ec2415bc 67 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 68 lcd.printf("4: Terug");
r0446849 0:b0e0ec2415bc 69 wait(1);
r0446849 0:b0e0ec2415bc 70 }
r0446849 0:b0e0ec2415bc 71 if(push1 == 1){ //als drukknop 1 word ingedrukt
r0446849 0:b0e0ec2415bc 72 lcd.cls(); //Drukknop info weergeven en clear LCD
r0446849 0:b0e0ec2415bc 73 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 74 lcd.printf("Menu: Helderheid");
r0446849 0:b0e0ec2415bc 75 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 76 lcd.printf("<+ -> bev. anu.");
r0446849 0:b0e0ec2415bc 77 wait(0.5);
r0446849 0:b0e0ec2415bc 78 vorig_licht = licht; //vergrendel de vorige waarde van licht indien er word geanuleerd
r0446849 0:b0e0ec2415bc 79 while(push3 == 0 && push4 == 0){ //while drukknoppen 3 en 4 niet ingedrukt zijn
r0446849 0:b0e0ec2415bc 80 LCDBack = licht; //geef de backlight de waarde van licht
r0446849 0:b0e0ec2415bc 81 if(push1 == 1){ //Als drukknop 1 word ingedrukt
r0446849 1:8aada2d4df12 82 licht = licht - 0.05; //Licht doen toenemen, de variabele word verkleint
r0446849 1:8aada2d4df12 83 ledr = 1; //aansturen led voor indicatie toename
r0446849 0:b0e0ec2415bc 84 ledg = 1;
r0446849 0:b0e0ec2415bc 85 ledb = 0;
r0446849 0:b0e0ec2415bc 86 if(licht <= 0){ //Als licht kleiner of gelijk aan 0 is word de waarde automatisch
r0446849 0:b0e0ec2415bc 87 licht = 0; //terug 0, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
r0446849 0:b0e0ec2415bc 88 }
r0446849 0:b0e0ec2415bc 89 wait(0.2);
r0446849 0:b0e0ec2415bc 90 }
r0446849 0:b0e0ec2415bc 91 if(push2 == 1){ //Als drukknop 2 word ingedrukt
r0446849 1:8aada2d4df12 92 licht = licht + 0.05; //Licht doen afnemen, de variabele word vergroot
r0446849 1:8aada2d4df12 93 ledr = 0; //aansturen led voor indicatie afname
r0446849 0:b0e0ec2415bc 94 ledg = 1;
r0446849 0:b0e0ec2415bc 95 ledb = 1;
r0446849 0:b0e0ec2415bc 96 if(licht >= 1){ //Als licht groter of gelijk aan 1 is word de waarde automatisch
r0446849 0:b0e0ec2415bc 97 licht = 1; //terug 1, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
r0446849 0:b0e0ec2415bc 98 }
r0446849 0:b0e0ec2415bc 99 wait(0.2);
r0446849 0:b0e0ec2415bc 100 }
r0446849 0:b0e0ec2415bc 101 wait(0.5);
r0446849 0:b0e0ec2415bc 102 }
r0446849 0:b0e0ec2415bc 103 if(push4 == 1){ //Als drukknop 4 ingedrukt word (Anulatie)
r0446849 0:b0e0ec2415bc 104 licht = vorig_licht; //licht krijgt de vorige waarde terug
r0446849 0:b0e0ec2415bc 105 }
r0446849 0:b0e0ec2415bc 106 }
r0446849 0:b0e0ec2415bc 107 }
r0446849 0:b0e0ec2415bc 108 if(push3 == 1){ //Als drukknop 3 ingedrukt word (Bevestiging)
r0446849 0:b0e0ec2415bc 109 lcd.cls(); //indicatie bevestiging op LCD en clear LCD
r0446849 0:b0e0ec2415bc 110 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 111 lcd.printf("Invoer");
r0446849 0:b0e0ec2415bc 112 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 113 lcd.printf("bevestigd");
r0446849 0:b0e0ec2415bc 114 wait(2);
r0446849 0:b0e0ec2415bc 115 }
r0446849 0:b0e0ec2415bc 116 push1.rise(NULL); //Verwijder interupt flags
r0446849 0:b0e0ec2415bc 117 push2.rise(NULL);
r0446849 0:b0e0ec2415bc 118 push3.rise(NULL);
r0446849 0:b0e0ec2415bc 119 push4.rise(NULL);
r0446849 0:b0e0ec2415bc 120 LCDBack = licht; //Backlight aansturen
r0446849 0:b0e0ec2415bc 121 lcd.cls(); //indicatie voor verlaten van menu en clear LCD
r0446849 0:b0e0ec2415bc 122 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 123 lcd.printf("Terug naar");
r0446849 0:b0e0ec2415bc 124 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 125 lcd.printf("programma");
r0446849 0:b0e0ec2415bc 126 wait(2);
r0446849 0:b0e0ec2415bc 127
r0446849 0:b0e0ec2415bc 128 }
r0446849 0:b0e0ec2415bc 129
r0446849 0:b0e0ec2415bc 130 void instelling(){
r0446849 0:b0e0ec2415bc 131 wait(2);
r0446849 0:b0e0ec2415bc 132 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 133 lcd.printf("instelling %1.1f", ingesteld); //plaats ingestelde waarde op LCD
r0446849 0:b0e0ec2415bc 134 vorige_instelling = ingesteld; //vergrendel de vorige waarde van ingesteld indien er word geanuleerd
r0446849 0:b0e0ec2415bc 135 while(push3 == 0 && push4 == 0){ //while drukknoppen 3 en 4 niet ingedrukt zijn
r0446849 0:b0e0ec2415bc 136 ledr = 0; //aansturen led
r0446849 0:b0e0ec2415bc 137 ledg = 0;
r0446849 0:b0e0ec2415bc 138 ledb = 0;
r0446849 0:b0e0ec2415bc 139 lcd.locate(0,1); //bepaal cursor locatie LCD
r0446849 0:b0e0ec2415bc 140 lcd.printf("naar --> %1.1f", ingesteld); //plaats de nieuwe waarde op het LCD
r0446849 0:b0e0ec2415bc 141 if(push1 == 1){ //Als drukknop 1 ingedrukt word
r0446849 0:b0e0ec2415bc 142 ingesteld = ingesteld + 0.5; //ingestelde waarde laten toenemen
r0446849 0:b0e0ec2415bc 143 ledr = 1; //aansturen led voor indicatie toename
r0446849 0:b0e0ec2415bc 144 ledg = 0;
r0446849 0:b0e0ec2415bc 145 ledb = 0;
r0446849 0:b0e0ec2415bc 146 wait(0.5);
r0446849 0:b0e0ec2415bc 147 }
r0446849 0:b0e0ec2415bc 148 if(push2 == 1){ //Als drukknop 2 ingedrukt word
r0446849 0:b0e0ec2415bc 149 ingesteld = ingesteld - 0.5; //ingestelde waarde laten afnemen
r0446849 0:b0e0ec2415bc 150 ledr = 0; //aansturen led voor indicatie afname
r0446849 0:b0e0ec2415bc 151 ledg = 0;
r0446849 0:b0e0ec2415bc 152 ledb = 1;
r0446849 0:b0e0ec2415bc 153 wait(0.5);
r0446849 0:b0e0ec2415bc 154 }
r0446849 0:b0e0ec2415bc 155 wait(0.5);
r0446849 0:b0e0ec2415bc 156 }
r0446849 0:b0e0ec2415bc 157 if(push4 == 1){ //Als drukknop 4 ingedrukt word (Anulatie)
r0446849 0:b0e0ec2415bc 158 ingesteld = vorige_instelling; //de ingestelde waarde verkrijgt de vorige waarde terug
r0446849 0:b0e0ec2415bc 159 }
r0446849 0:b0e0ec2415bc 160 push1.rise(NULL); //Verwijder interupt flags
r0446849 0:b0e0ec2415bc 161 push2.rise(NULL);
r0446849 0:b0e0ec2415bc 162 push3.rise(NULL);
r0446849 0:b0e0ec2415bc 163 push4.rise(NULL);
r0446849 0:b0e0ec2415bc 164 lcd.cls(); //indicatie voor verlaten van menu en clear LCD
r0446849 0:b0e0ec2415bc 165 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 166 lcd.printf("Terug naar");
r0446849 0:b0e0ec2415bc 167 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 168 lcd.printf("programma");
r0446849 0:b0e0ec2415bc 169 wait(2);
r0446849 0:b0e0ec2415bc 170 }
r0446849 0:b0e0ec2415bc 171
r0446849 0:b0e0ec2415bc 172 int main(){
r0446849 0:b0e0ec2415bc 173 int junk = 0; //RTC Klok
r0446849 0:b0e0ec2415bc 174
r0446849 0:b0e0ec2415bc 175 myservo = (5 * 0.000511 + 0.026); //Motor op 90 graden zetten, dit is de begin toestand.
r0446849 0:b0e0ec2415bc 176 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 177 lcd.printf("Welkom"); //Welkom scherm
r0446849 0:b0e0ec2415bc 178 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 179 lcd.printf("Opstarten ...");
r0446849 0:b0e0ec2415bc 180 wait(3);
r0446849 0:b0e0ec2415bc 181 while(1){
r0446849 0:b0e0ec2415bc 182 push1.rise(&instelling); //drukknooppen 1 tot en met 3 onder interrupt
r0446849 0:b0e0ec2415bc 183 push2.rise(&instelling);
r0446849 0:b0e0ec2415bc 184 push3.rise(&menu);
r0446849 0:b0e0ec2415bc 185
r0446849 0:b0e0ec2415bc 186 test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year)); //uitlezen waarde RTC
r0446849 0:b0e0ec2415bc 187
r0446849 0:b0e0ec2415bc 188 junk = 0x39; // just a junk value do read and write test to DS1307 ram
r0446849 0:b0e0ec2415bc 189 test_rw(my1307.write( 0x20, junk)); // this should write the value of junk to register 0x20 (a ram location) in the ds1307.
r0446849 0:b0e0ec2415bc 190 junk = 0; // clear junk to show that when the register is read from the correct value is obtained
r0446849 0:b0e0ec2415bc 191 test_rw(my1307.read( 0x20, &junk)); // this should read register 0x20
r0446849 0:b0e0ec2415bc 192
r0446849 0:b0e0ec2415bc 193 LCDBack = licht; //Backlight aansturen
r0446849 0:b0e0ec2415bc 194 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 195 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 196 lcd.printf("%d/%d/%d %d:%d",date,month,year,hours,min); //print de datum en de tijd
r0446849 0:b0e0ec2415bc 197 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 198 lcd.printf("<+ -> menu");
r0446849 0:b0e0ec2415bc 199 wait(5);
r0446849 0:b0e0ec2415bc 200 i=0; //maak de float i 0. (nodig voor de temperatuursmeting)
r0446849 0:b0e0ec2415bc 201 for(int t=0; t<100; t++) i=i+temp01.read(); //en meten van temperatuur binnen
r0446849 0:b0e0ec2415bc 202 j=0; //maak de float j 0. (nodig voor de temperatuursmeting)
r0446849 0:b0e0ec2415bc 203 for(int u=0; u<100; u++) j=j+temp02.read(); //en meten van temperatuur buiten
r0446849 0:b0e0ec2415bc 204 lcd.cls();
r0446849 0:b0e0ec2415bc 205 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 206 lcd.printf("Binnen: %4.1fC ", i*3.3); //print de temperatuurswaarde op de LCD
r0446849 0:b0e0ec2415bc 207 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 208 lcd.printf("Buiten: %4.1fC ", j*3.3);
r0446849 0:b0e0ec2415bc 209 wait(5);
r0446849 0:b0e0ec2415bc 210 if(i*3.3 < ingesteld){ //Als de temperatuur kleiner is dan de ingestelde waarde
r0446849 0:b0e0ec2415bc 211 ledr = 0; //aansturen RGB led
r0446849 0:b0e0ec2415bc 212 ledg = 1;
r0446849 0:b0e0ec2415bc 213 ledb = 0;
r0446849 0:b0e0ec2415bc 214 relais = 1; //Relais hoog maken
r0446849 0:b0e0ec2415bc 215 //myservo = 0;
r0446849 0:b0e0ec2415bc 216 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 217 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 218 lcd.printf("ingesteld: %1.1f", ingesteld); //print de ingestelde waarde op het LCD
r0446849 0:b0e0ec2415bc 219 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 220 lcd.printf("Verwarming: aan"); //print de status van de verwarming op het LCD
r0446849 0:b0e0ec2415bc 221
r0446849 0:b0e0ec2415bc 222 myservo = (170 * 0.000511 + 0.026); //Motor op 0 graden zetten, dit is de begin toestand.
r0446849 0:b0e0ec2415bc 223 wait(2);
r0446849 0:b0e0ec2415bc 224
r0446849 0:b0e0ec2415bc 225 }
r0446849 0:b0e0ec2415bc 226 if(i*3.3 >= ingesteld){ //Als de temperatuur grotere of gelijk is aan de ingestelde waarde
r0446849 0:b0e0ec2415bc 227 ledr = 1; //aansturen RGB led
r0446849 0:b0e0ec2415bc 228 ledg = 0;
r0446849 0:b0e0ec2415bc 229 ledb = 0;
r0446849 0:b0e0ec2415bc 230 relais = 0; //Relais laag maken
r0446849 0:b0e0ec2415bc 231 //myservo = 1;
r0446849 0:b0e0ec2415bc 232 lcd.cls(); //clear LCD
r0446849 0:b0e0ec2415bc 233 lcd.locate(0,0);
r0446849 0:b0e0ec2415bc 234 lcd.printf("ingesteld: %1.1f", ingesteld); //print de ingestelde waarde op het LCD
r0446849 0:b0e0ec2415bc 235 lcd.locate(0,1);
r0446849 0:b0e0ec2415bc 236 lcd.printf("Verwarming: uit"); //print de status van de verwarming op het LCD
r0446849 0:b0e0ec2415bc 237
r0446849 0:b0e0ec2415bc 238 myservo = (5 * 0.000511 + 0.026); //Motor op 0 graden zetten, dit is de begin toestand.
r0446849 0:b0e0ec2415bc 239 wait(2);
r0446849 0:b0e0ec2415bc 240
r0446849 0:b0e0ec2415bc 241 }
r0446849 0:b0e0ec2415bc 242 wait(3);
r0446849 0:b0e0ec2415bc 243 }
r0446849 0:b0e0ec2415bc 244 }