Project Embedded C

Dependencies:   DS1307 EthernetInterface Servo TextLCD WebSocketClient mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
RubenHendriks
Date:
Thu Dec 18 10:35:34 2014 +0000
Child:
1:00c0039f4309
Commit message:
Project embbeded C Temperatuur

Changed in this revision

DS1307.lib Show annotated file Show diff for this revision Revisions of this file
EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
Servo.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
WebSocketClient.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DS1307.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/harrypowers/code/DS1307/#c3e4da8feb10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetInterface.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/EthernetInterface/#de796e2a5e98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/Servo/#36b69a7ced07
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebSocketClient.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/samux/code/WebSocketClient/#4567996414a5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,476 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "Servo.h"
+#include "ds1307.h"
+#include <time.h>  
+#include "EthernetInterface.h"
+#include "Websocket.h"
+
+
+DigitalOut myled(LED1);
+AnalogIn LM35_1(p15);
+AnalogIn LM35_2(p16);
+AnalogIn LM35_3(p17);
+AnalogIn LM35_4(p18);
+AnalogIn Potmeter(p19); 
+Servo myservo(p24);
+TextLCD lcd(p12,p11,p8,p7,p6,p5);
+DigitalOut Relais(p13);
+PwmOut b (p21);
+PwmOut g (p22);
+PwmOut r (p23);
+DigitalIn SW_1(p30);
+DigitalIn SW_2(p29);
+DigitalIn SW_3(p28);
+DigitalIn SW_4(p27);
+DS1307 my1307(p9,p10);
+
+float duty_red,duty_green;
+float LMTemp_1,LMTemp_2,LMTemp_3,LMTemp_4;
+int menu = 0;
+float instelliving = 20;
+float instelkeuken = 20;
+float instelslaap = 20;
+int sec,min,uur,dag,datum,maand,jaar;
+int startsec = 0;
+int startmin = 0;
+int startuur = 7; 
+int stopsec = 0;
+int stopmin = 0;
+int stopuur = 23;
+
+int timerwijzigen = 0;
+int flikertimer = 0;
+int wijzigmenustart = 0;
+int wijzigmenustop = 0;
+float stooklijn = 0;
+int menubuffer = 0;
+int showtimer = 0;
+bool showstooklijn = false;
+float hysteresis = 1.5;
+bool hysteresisbuffer[3];
+float position = 0;
+bool aan = true;
+//------------------------------------------------------------------- 
+void onoff(int status){
+    if (status >= 1){
+        Relais = 1;
+            duty_red=duty_red+0.0005;
+            duty_green=duty_green-0.0005;
+            if (duty_red >= 1) (duty_red = 1);
+            if (duty_green <= 0) (duty_green = 0);
+            r.write(duty_red);
+            g.write(duty_green);   
+        }
+    else {
+        Relais = 0;            
+            duty_red=duty_red-0.0005;
+            duty_green=duty_green+0.0005;
+            if (duty_red <= 0) (duty_red = 0);
+            if (duty_green >=1) (duty_green = 1);
+            r.write(duty_red);
+            g.write(duty_green);
+         }
+ }
+ //-----------------------------------------------------------------
+ float LM35 (int sensor){
+     float waardes[100] = {0};
+     float gemiddelde = 0;
+     float temperatuur = 0;
+     
+     for(int i=0;i<100;i++){
+         if (sensor == 1) (waardes[i] = LM35_1.read());
+         if (sensor == 2) (waardes[i] = LM35_2.read());
+         if (sensor == 3) (waardes[i] = LM35_3.read());
+         if (sensor == 4) (waardes[i] = LM35_4.read());
+         wait(0.00001);
+         }
+    
+    for(int i=0;i<100;i++){
+        gemiddelde = gemiddelde + waardes[i];
+        }
+    
+    temperatuur = ((gemiddelde /100) * 368.5503686)- 6; //368
+    return temperatuur;
+} 
+//------------------------------------------------------------------
+float stooklijnfunctie (float huidige){
+   
+     float analoog = Potmeter * 3;
+    if (huidige - analoog > 0.1 | analoog - huidige > 0.1){
+        if(showstooklijn == false) (menubuffer = menu);
+        showstooklijn = true;
+        menu = 8;
+    }
+    else (analoog = huidige);
+    
+    if (showstooklijn == true & menu != 8)(showstooklijn = false);
+    if (showstooklijn == true & menu == 8){
+     showtimer = showtimer + 1;
+     if (showtimer > 3000) {
+        menu = menubuffer;
+        showstooklijn = false;
+        showtimer = 0;
+        }
+    }
+    
+   
+    return analoog;
+}
+//------------------------------------------------------------------
+const char* dagen (int dag){
+    const char* dagbenaming ="";
+    if (dag == 1) (dagbenaming = "Ma");
+    else if (dag == 2) (dagbenaming = "Di");
+    else if (dag == 3) (dagbenaming = "Wo");
+    else if (dag == 4) (dagbenaming = "Do");
+    else if (dag == 5) (dagbenaming = "Vr");
+    else if (dag == 6) (dagbenaming = "Za");
+    else if (dag == 7) (dagbenaming = "Zo");    
+    
+return dagbenaming;
+    }
+
+ //-----------------------------------------------------------------
+ int aantalwarmtevraag (){
+     int aantal =0; 
+     if (LMTemp_1 < (instelliving - (hysteresis /2)) & hysteresisbuffer[0] == false) (hysteresisbuffer[0] = true);
+     if (LMTemp_1 < (instelliving - (hysteresis /2)) | hysteresisbuffer[0] == true ) (aantal = aantal + 1);
+     if (LMTemp_1 > (instelliving + (hysteresis /2))) (hysteresisbuffer[0] = false);
+     
+     if (LMTemp_2 < (instelkeuken - (hysteresis /2)) & hysteresisbuffer[1] == false) (hysteresisbuffer[1] = true);
+     if (LMTemp_2 < (instelkeuken - (hysteresis /2)) | hysteresisbuffer[1] == true ) (aantal = aantal + 1);
+     if (LMTemp_2 > (instelkeuken + (hysteresis /2))) (hysteresisbuffer[1] = false);
+     
+     if (LMTemp_3 < (instelslaap - (hysteresis /2)) & hysteresisbuffer[2] == false) (hysteresisbuffer[2] = true);
+     if (LMTemp_3 < (instelslaap - (hysteresis /2)) | hysteresisbuffer[2] == true ) (aantal = aantal + 1);
+     if (LMTemp_3 > (instelslaap + (hysteresis /2))) (hysteresisbuffer[2] = false);
+    
+    if (uur == startuur & min == startmin & sec == startsec) (aan = true);
+    if (uur == stopuur & min == stopmin & sec == stopsec) (aan = false);
+    if (aan == false) (aantal = 0);
+    return aantal;
+     }
+ //-----------------------------------------------------------------
+ void servoposition (int aantalwarmtevraag, float stooklijn){
+     float graden = -105 + (aantalwarmtevraag * 40);
+      graden = graden + (stooklijn * 25);
+      if (graden >= 90) (graden = 90);
+      if (aantalwarmtevraag == 0) (graden = -105);
+      if (stooklijn <= 0.09) (graden = -105);
+      myservo.position(graden);
+    
+     }
+ //*****************************************************************
+ //*******************************Main******************************
+ //*****************************************************************
+int main() {
+
+lcd.cls();
+lcd.locate(0,0);
+lcd.printf("Welkom");                                                   //Geef een welkomsboodschap weer op het LCD wanneer.
+lcd.locate(0,1);
+lcd.printf("Initialiseren");    
+    
+    
+myservo.calibrate(0.0009, 105);                                         //Geef het middenpunt van de servo aan (servo is niet 100% gecentreerd daarom 105°)
+//---------------Websocket--------------------------
+char json_str[1000];                                                    //Maak een buffer aan voor de te verzenden karakters
+ 
+    EthernetInterface eth;                                              //Declareer de ethernet interface
+    eth.init();                                                         //Use DHCP ip
+    eth.connect();                                                      //Maak conectie met het gekregen ip adress
+    
+    
+    Websocket ws("ws://sockets.mbed.org:443/ws/ProjectEmbeddedC/wo");   //Server mbed
+    ws.connect();                                                       //Connectie maken met de server
+    wait(2.0);                                                          //Wacht even totodat de mbed conectie heeft gemaakt met de server
+//--------------------------------------------------
+
+int timer = 0; 
+int timerweb = 0;
+  
+    while(1) {
+          
+timer = timer + 1;
+if (timer >= 250){
+timer = 0;
+ timerweb = timerweb + 1;
+ if (timerweb >= 20){
+ timerweb = 0;
+    
+//-----------------------------------------------------------------
+sprintf(json_str,"------------------------------------------------------------------- \r\n ");
+ws.send(json_str);
+sprintf(json_str, "Starttijd: %.2D:%.2D:%.2D \r\n        Stoptijd: %.2D:%.2D:%.2D \r\n",startuur,startmin,startsec,stopuur,stopmin,stopsec);
+ws.send(json_str);
+sprintf(json_str, "Hysteresis: %.1f °C \r\n",hysteresis);
+ws.send(json_str);
+sprintf(json_str, "Huidige stooklijn: %.1f °C/uur \r\n",stooklijn);
+ws.send(json_str);
+sprintf(json_str, "Huidige buiten temperatuur: %.1f °C \r\n ",LMTemp_4);
+ws.send(json_str);
+sprintf(json_str, "Huidige temperuur slaapkamer: %.1f °C \r\n        Gewenst %.1f °C \r\n ",LMTemp_3,instelslaap);
+ws.send(json_str);
+sprintf(json_str, "Huidige temperuur keuken: %.1f °C \r\n        Gewenst %.1f °C \r\n ",LMTemp_2,instelkeuken);
+ws.send(json_str);
+sprintf(json_str, "Huidige temperuur living: %.1f °C \r\n        Gewenst %.1f °C \r\n ",LMTemp_1,instelliving);
+ws.send(json_str);
+sprintf(json_str, "%s %.2D-%.2D-%.2D %.2D:%.2D:%.2D \r\n ",dagen(dag),datum,maand,jaar,uur,min,sec);
+ws.send(json_str);
+
+        myled = 1;
+}
+//-----------------------------------------------------------------
+    
+    
+    
+    
+    my1307.gettime( &sec, &min, &uur, &dag, &datum, &maand, &jaar);
+    
+   
+       LMTemp_1 = LM35(1);
+       LMTemp_2 = LM35(2);
+       LMTemp_3 = LM35(3);
+       LMTemp_4 = LM35(4);
+        
+        if (SW_1 == true){
+            menu = menu + 1;
+            if (menu > 11) (menu = 0);
+        }
+            
+        if (SW_2 == true){
+            menu =menu - 1;
+            if (menu < 0) (menu = 11);
+        }
+        
+       if (menu == 0){
+       lcd.cls();
+       lcd.locate(4,0);
+       lcd.printf("%.2D:%.2D:%.2D",uur,min,sec);
+       lcd.locate(3,1);
+       lcd.printf("%s %.2D-%.2D-%.2D",dagen(dag),datum,maand,jaar);
+       
+       }
+       
+       
+       else if (menu == 1){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Temperatuur");
+       lcd.locate(0,1);
+       lcd.printf("Living: %.1f C",LMTemp_1);
+       }
+       
+       else if (menu == 2){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Temperatuur");
+       lcd.locate(0,1);
+       lcd.printf("Keuken: %.1f C",LMTemp_2);
+       }
+       
+        else if (menu == 3){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Temperatuur");
+       lcd.locate(0,1);
+       lcd.printf("Slaap: %.1f C",LMTemp_3);
+       }
+       
+       else if (menu == 4){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Temperatuur");
+       lcd.locate(0,1);
+       lcd.printf("Buiten: %.1f C",LMTemp_4);
+       }
+       
+       else if (menu == 5){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Gewenste temp");
+       lcd.locate(0,1);
+       lcd.printf("Living: %.1f C",instelliving);
+            
+            if (SW_3 == true & instelliving < 30) (instelliving = instelliving + 0.1);
+            if (SW_4 == true & instelliving > 0) (instelliving = instelliving - 0.1);
+       }
+       
+       else if (menu == 6){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Gewenste temp");
+       lcd.locate(0,1);
+       lcd.printf("Keuken: %.1f C",instelkeuken);
+            
+            if (SW_3 == true & instelkeuken < 30) (instelkeuken = instelkeuken + 0.1);
+            if (SW_4 == true & instelkeuken > 0) (instelkeuken = instelkeuken - 0.1);
+       }
+       
+       else if (menu == 7){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Gewenste temp");
+       lcd.locate(0,1);
+       lcd.printf("Slaap: %.1f C",instelslaap);
+            
+            if (SW_3 == true & instelslaap < 30) (instelslaap = instelslaap + 0.1);
+            if (SW_4 == true & instelslaap > 0) (instelslaap = instelslaap - 0.1);
+       }
+       
+       else if (menu == 8){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Stooklijn");
+       lcd.locate(0,1);
+       lcd.printf("%.1f C/uur",stooklijn);
+       wijzigmenustart = 0;
+       }
+       
+       else if (menu == 9){
+       lcd.cls();
+       lcd.locate(0,0);
+       lcd.printf("Hysteresis");
+       lcd.locate(0,1);
+       lcd.printf("%.1f C",hysteresis);
+       wijzigmenustart = 0;
+       
+       if (SW_3 == true & hysteresis < 5) (hysteresis = hysteresis + 0.1);
+       if (SW_4 == true & hysteresis > 0) (hysteresis = hysteresis - 0.1);
+       }
+//----------------Menu 10--------------------------------     
+       else if (menu == 10){
+           lcd.cls();
+           lcd.locate(0,0);
+           lcd.printf("Starttijd");
+               if (wijzigmenustart == 0 | flikertimer >= 3){
+               lcd.locate(0,1);
+               lcd.printf("%.2D:%.2D:%.2D",startuur,startmin,startsec);
+               }
+            timerwijzigen = timerwijzigen + 1;
+                if (!(SW_3 == true && SW_4 == true & 1)) (timerwijzigen = 0);
+            if (timerwijzigen == 3)(wijzigmenustart = wijzigmenustart + 1);
+            if (wijzigmenustart > 3) (wijzigmenustart = 0);
+         
+            if (wijzigmenustart == 1){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Starttijd");
+                lcd.locate(0,1);
+                lcd.printf("  :%.2D:%.2D",startmin,startsec);//,startmin,startsec); 
+                }
+                if (flikertimer > 5) (flikertimer = 0);             
+            if (SW_3 == true) (startuur = startuur + 1);
+            if (SW_4 == true) (startuur = startuur - 1);
+            if (startuur > 23) (startuur = 0);
+            if (startuur <= 0) (startuur = 23);
+            }
+            
+            if (wijzigmenustart == 2){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Starttijd");
+                lcd.locate(0,1);
+                lcd.printf("%.2D:  :%.2D",startuur,startsec);//,startmin,startsec); 
+                }
+                if (flikertimer > 5) (flikertimer = 0);            
+            if (SW_3 == true) (startmin = startmin + 1);
+            if (SW_4 == true) (startmin = startmin - 1);
+            if (startmin > 59) (startmin = 0);
+            if (startmin <= 0) (startmin = 59);
+            }                        
+          if (wijzigmenustart == 3){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Starttijd");
+                lcd.locate(0,1);
+                lcd.printf("%.2D:%.2D:  ",startuur,startmin);//,startmin,startsec); 
+                }
+                if (flikertimer > 5) (flikertimer = 0);           
+            if (SW_3 == true) (startsec = startsec + 1);
+            if (SW_4 == true) (startsec = startsec - 1);
+            if (startsec > 59) (startsec = 0);
+            if (startsec <= 0) (startsec = 59);
+            }
+            wijzigmenustop = 0;
+    }
+//---------------------------- Menu 11---------------------------------       
+       else if (menu == 11){
+           lcd.cls();
+           lcd.locate(0,0);
+           lcd.printf("Stoptijd");
+               if (wijzigmenustop == 0 | flikertimer >= 3){
+               lcd.locate(0,1);
+               lcd.printf("%.2D:%.2D:%.2D",stopuur,stopmin,stopsec);
+               }
+            timerwijzigen = timerwijzigen + 1;
+                if (!(SW_3 == true && SW_4 == true & 1)) (timerwijzigen = 0);
+            if (timerwijzigen == 3)(wijzigmenustop = wijzigmenustop + 1);
+            if (wijzigmenustop > 3) (wijzigmenustop = 0);
+         
+            if (wijzigmenustop == 1){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Stoptijd");
+                lcd.locate(0,1);
+                lcd.printf("  :%.2D:%.2D",stopmin,stopsec); 
+                }
+                if (flikertimer > 5) (flikertimer = 0);             
+            if (SW_3 == true) (stopuur = stopuur + 1);
+            if (SW_4 == true) (stopuur = stopuur - 1);
+            if (stopuur > 23) (stopuur = 0);
+            if (startuur <= 0) (startuur = 23);
+            }
+            
+            if (wijzigmenustop == 2){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Stoptijd");
+                lcd.locate(0,1);
+                lcd.printf("%.2D:  :%.2D",stopuur,stopsec);
+                }
+                if (flikertimer > 5) (flikertimer = 0);            
+            if (SW_3 == true) (stopmin = stopmin + 1);
+            if (SW_4 == true) (stopmin = stopmin - 1);
+            if (stopmin > 59) (stopmin = 0);
+            if (startmin <= 0) (startmin = 59);
+            }                        
+          if (wijzigmenustop == 3){
+            flikertimer = flikertimer + 1;
+                if (flikertimer <= 4) {
+                lcd.locate(0,0);
+                lcd.printf("Stoptijd");
+                lcd.locate(0,1);
+                lcd.printf("%.2D:%.2D:  ",stopuur,stopmin);
+                }
+                if (flikertimer > 5) (flikertimer = 0);           
+            if (SW_3 == true) (stopsec = stopsec + 1);
+            if (SW_4 == true) (stopsec = stopsec - 1);
+            if (stopsec > 59) (stopsec = 0);
+            if (startsec <= 0) (startsec = 59);
+            }
+            wijzigmenustart = 0;
+    }
+    
+       
+       
+       } 
+
+
+      stooklijn = stooklijnfunctie(stooklijn);
+    // int test = SW_4;
+     onoff(aantalwarmtevraag());
+     servoposition(aantalwarmtevraag(),stooklijn);
+     
+        
+     wait(0.001);
+     
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#13a25134ac60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Dec 18 10:35:34 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5
\ No newline at end of file