
Project Embedded C
Dependencies: DS1307 EthernetInterface Servo TextLCD WebSocketClient mbed-rtos mbed
main.cpp
- Committer:
- RubenHendriks
- Date:
- 2014-12-18
- Revision:
- 0:f8f8433058d6
- Child:
- 1:00c0039f4309
File content as of revision 0:f8f8433058d6:
#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); } }