Project verwarmingsregelaar

Dependencies:   DS1307 Servo TextLCD mbed

Fork of Project_02_programma by Robin Bogaerts

Revision:
0:b0e0ec2415bc
Child:
1:8aada2d4df12
diff -r 000000000000 -r b0e0ec2415bc main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 18 09:51:25 2014 +0000
@@ -0,0 +1,244 @@
+//Project_02
+#include "mbed.h"
+#include "TextLCD.h"
+#include "Servo.h"
+#include "ds1307.h"
+
+DigitalOut ledr(p5);                        //RGB led rood
+DigitalOut ledg(p6);                        //RGB led groen
+DigitalOut ledb(p7);                        //RGB led blauw
+DigitalOut relais(p8);                      //Relais
+DS1307 my1307(p9,p10);                      //start DS1307 class and give it pins for connections of the DS1307 device
+InterruptIn push1(p11);                     //drukknop onder interrupt mogelijk (hoger)
+InterruptIn push2(p12);                     //drukknop onder interrupt mogelijk (lager)
+InterruptIn push3(p13);                     //drukknop onder interrupt mogelijk (bevestigen)
+InterruptIn push4(p14);                     //drukknop onder interrupt mogelijk (anuleren)
+AnalogIn temp01(p19);                       //LM35 Binnen
+AnalogIn temp02(p20);                       //LM35 Buiten
+PwmOut myservo(p22);                        //Servo motor met pwm
+PwmOut LCDBack(p21);                        //backlight LCD control
+TextLCD lcd(p25, p26, p27, p28, p29, p30);  //LCD
+
+float licht=0;                      //backlight
+float vorig_licht=0;                //backlight onthouden van waarde
+float i=0;                          //temperatuur 01
+float j=0;                          //temperatuur 02
+float ingesteld=21;                 //ingestelde temperatuur
+float vorige_instelling=21;         //ingestelde temperatuur onthouden van waarde
+
+int sec;                            //RTC
+int min;                            //RTC
+int hours;                          //RTC
+int day;                            //RTC
+int date;                           //RTC
+int month;                          //RTC
+int year;                           //RTC
+
+void test_rw(int test) {                    //RTC Klok
+}
+
+void menu(void){    
+    lcd.cls();                              //Menu load screen (anti dender, als de knop te lang word
+    lcd.locate(0,0);                        //ingedrukt kan dit per ongeluk al een volgende functie
+    lcd.printf("******Menu******");         //starten vandaar dit load screen om dit te vermijden.
+    lcd.locate(0,1);                        //men kan ook gewoon een wait plaatsen van een seconde.)
+    lcd.printf("Laden .");                  //en clear LCD
+    wait(0.5);  
+    lcd.locate(0,1);
+    lcd.printf("Laden ..");
+    wait(0.5);
+    lcd.locate(0,1);
+    lcd.printf("Laden ...");
+    wait(0.5);
+    while(push4 == 0){                                  //while anuleren niet is in gedrukt
+        while(push1 == 0 && push2 == 0 && push4 == 0){  //while drukknoppen 1,2 en 4 niet ingedrukt zijn
+            ledr = 0;                                   //aansturing RGB led
+            ledg = 0;
+            ledb = 0;
+            lcd.cls();                                  //keuze menu weergeven en clear LCD
+            lcd.locate(0,0);                            //Plaats LCD cursor op de juiste plaats
+            lcd.printf("******Menu******");
+            lcd.locate(0,1);
+            lcd.printf("1: Helderheid");
+            wait(1);
+            lcd.cls();                                  //clear LCD
+            lcd.locate(0,0);
+            lcd.printf("******Menu******");
+            lcd.locate(0,1);
+            lcd.printf("4: Terug");
+            wait(1);
+        }
+        if(push1 == 1){                         //als drukknop 1 word ingedrukt
+            lcd.cls();                          //Drukknop info weergeven en clear LCD
+            lcd.locate(0,0);
+            lcd.printf("Menu: Helderheid");
+            lcd.locate(0,1);
+            lcd.printf("<+ -> bev. anu.");
+            wait(0.5); 
+            vorig_licht = licht;                //vergrendel de vorige waarde van licht indien er word geanuleerd
+            while(push3 == 0 && push4 == 0){    //while drukknoppen 3 en 4 niet ingedrukt zijn
+                LCDBack = licht;                //geef de backlight de waarde van licht
+                if(push1 == 1){                 //Als drukknop 1 word ingedrukt
+                    licht = licht - 0.05;       //Licht doen afnemen
+                    ledr = 1;                   //aansturen led voor indicatie afname
+                    ledg = 1;
+                    ledb = 0;
+                    if(licht <= 0){             //Als licht kleiner of gelijk aan 0 is word de waarde automatisch
+                        licht = 0;              //terug 0, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
+                    }
+                    wait(0.2);
+                }
+                if(push2 == 1){                 //Als drukknop 2 word ingedrukt
+                    licht = licht + 0.05;       //Licht doen toenemen
+                    ledr = 0;                   //aansturen led voor indicatie toename
+                    ledg = 1;
+                    ledb = 1;
+                    if(licht >= 1){             //Als licht groter of gelijk aan 1 is word de waarde automatisch
+                        licht = 1;              //terug 1, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
+                    }
+                    wait(0.2);
+                }
+                wait(0.5);    
+            }
+            if(push4 == 1){                     //Als drukknop 4 ingedrukt word (Anulatie)
+                licht = vorig_licht;            //licht krijgt de vorige waarde terug
+            }
+        }
+    }
+    if(push3 == 1){                 //Als drukknop 3 ingedrukt word (Bevestiging)
+        lcd.cls();                  //indicatie bevestiging op LCD en clear LCD
+        lcd.locate(0,0);
+        lcd.printf("Invoer");
+        lcd.locate(0,1);
+        lcd.printf("bevestigd");
+        wait(2);
+    }
+    push1.rise(NULL);           //Verwijder interupt flags
+    push2.rise(NULL);
+    push3.rise(NULL);
+    push4.rise(NULL);
+    LCDBack = licht;            //Backlight aansturen
+    lcd.cls();                  //indicatie voor verlaten van menu en clear LCD
+    lcd.locate(0,0);
+    lcd.printf("Terug naar");
+    lcd.locate(0,1);
+    lcd.printf("programma");
+    wait(2);
+
+}
+
+void instelling(){
+    wait(2);    
+    lcd.cls();                                      //clear LCD                                          
+    lcd.printf("instelling %1.1f", ingesteld);      //plaats ingestelde waarde op LCD
+    vorige_instelling = ingesteld;                  //vergrendel de vorige waarde van ingesteld indien er word geanuleerd
+    while(push3 == 0 && push4 == 0){                //while drukknoppen 3 en 4 niet ingedrukt zijn
+        ledr = 0;                                   //aansturen led
+        ledg = 0;
+        ledb = 0;
+        lcd.locate(0,1);                            //bepaal cursor locatie LCD
+        lcd.printf("naar --> %1.1f", ingesteld);    //plaats de nieuwe waarde op het LCD
+        if(push1 == 1){                             //Als drukknop 1 ingedrukt word
+            ingesteld = ingesteld + 0.5;            //ingestelde waarde laten toenemen
+            ledr = 1;                               //aansturen led voor indicatie toename
+            ledg = 0;
+            ledb = 0;
+            wait(0.5);
+        }
+        if(push2 == 1){                             //Als drukknop 2 ingedrukt word
+            ingesteld = ingesteld - 0.5;            //ingestelde waarde laten afnemen
+            ledr = 0;                               //aansturen led voor indicatie afname
+            ledg = 0;
+            ledb = 1;
+            wait(0.5);
+        }
+        wait(0.5);    
+    }
+    if(push4 == 1){                                 //Als drukknop 4 ingedrukt word (Anulatie)
+        ingesteld = vorige_instelling;              //de ingestelde waarde verkrijgt de vorige waarde terug
+    }
+    push1.rise(NULL);       //Verwijder interupt flags
+    push2.rise(NULL);
+    push3.rise(NULL);
+    push4.rise(NULL);
+    lcd.cls();                  //indicatie voor verlaten van menu en clear LCD
+    lcd.locate(0,0);
+    lcd.printf("Terug naar");
+    lcd.locate(0,1);
+    lcd.printf("programma");
+    wait(2);
+}
+
+int main(){
+    int junk = 0;                           //RTC Klok
+    
+    myservo = (5 * 0.000511 + 0.026);       //Motor op 90 graden zetten, dit is de begin toestand.
+    lcd.cls();                              //clear LCD
+    lcd.printf("Welkom");                   //Welkom scherm
+    lcd.locate(0,1);
+    lcd.printf("Opstarten ...");
+    wait(3);
+    while(1){
+        push1.rise(&instelling);            //drukknooppen 1 tot en met 3 onder interrupt
+        push2.rise(&instelling);
+        push3.rise(&menu);
+        
+        test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));       //uitlezen waarde RTC
+        
+        junk = 0x39;                            // just a junk value do read and write test to DS1307 ram
+        test_rw(my1307.write( 0x20, junk));     // this should write the value of junk to register 0x20 (a ram location) in the ds1307.
+        junk = 0;                               // clear junk to show that when the register is read from the correct value is obtained
+        test_rw(my1307.read( 0x20, &junk));     // this should read register 0x20
+        
+        LCDBack = licht;                        //Backlight aansturen
+        lcd.cls();                              //clear LCD
+        lcd.locate(0,0);
+        lcd.printf("%d/%d/%d   %d:%d",date,month,year,hours,min);           //print de datum en de tijd
+        lcd.locate(0,1);
+        lcd.printf("<+ -> menu");
+        wait(5);
+        i=0;                                                                //maak de float i 0. (nodig voor de temperatuursmeting)
+        for(int t=0; t<100; t++) i=i+temp01.read();                         //en meten van temperatuur binnen
+        j=0;                                                                //maak de float j 0. (nodig voor de temperatuursmeting)
+        for(int u=0; u<100; u++) j=j+temp02.read();                         //en meten van temperatuur buiten
+        lcd.cls();
+        lcd.locate(0,0);
+        lcd.printf("Binnen: %4.1fC ", i*3.3);                               //print de temperatuurswaarde op de LCD
+        lcd.locate(0,1);
+        lcd.printf("Buiten: %4.1fC ", j*3.3);       
+        wait(5);
+        if(i*3.3 < ingesteld){                  //Als de temperatuur kleiner is dan de ingestelde waarde
+            ledr = 0;                           //aansturen RGB led
+            ledg = 1;
+            ledb = 0;
+            relais = 1;                         //Relais hoog maken
+            //myservo = 0;
+            lcd.cls();                          //clear LCD             
+            lcd.locate(0,0);
+            lcd.printf("ingesteld: %1.1f", ingesteld);              //print de ingestelde waarde op het LCD
+            lcd.locate(0,1);
+            lcd.printf("Verwarming: aan");                          //print de status van de verwarming op het LCD
+            
+            myservo = (170 * 0.000511 + 0.026);                     //Motor op 0 graden zetten, dit is de begin toestand.
+            wait(2);
+                        
+        }
+        if(i*3.3 >= ingesteld){                 //Als de temperatuur grotere of gelijk is aan de ingestelde waarde
+            ledr = 1;                           //aansturen RGB led
+            ledg = 0;
+            ledb = 0;
+            relais = 0;                         //Relais laag maken
+            //myservo = 1;
+            lcd.cls();                          //clear LCD
+            lcd.locate(0,0);
+            lcd.printf("ingesteld: %1.1f", ingesteld);              //print de ingestelde waarde op het LCD
+            lcd.locate(0,1);
+            lcd.printf("Verwarming: uit");                          //print de status van de verwarming op het LCD
+            
+            myservo = (5 * 0.000511 + 0.026);                       //Motor op 0 graden zetten, dit is de begin toestand.
+            wait(2);
+            
+        }
+        wait(3);
+    }
+}
\ No newline at end of file