Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1307 TextLCD mbed
main.cpp
00001 #include "mbed.h" //Invoegen van de mbed bibliotheek. 00002 #include "TextLCD.h" //Invoegen van de LCD bibliotheek. 00003 #include "ds1307.h" //Invoegen van de de1307 bibliotheek voor de CLK. 00004 #include "EthernetNetIf.h" //Invoegen van de ethernet bibliotheek. 00005 #include "HTTPServer.h" //Invoegen van de HTTP bibliotheek. 00006 #include "RPCFunction.h" //Invoegen van de RPC bibliotheek. 00007 //////////////////////////////////////////////////////////////////////////////////// 00008 TextLCD lcd(p21, p22, p23, p24, p27, p28); //Instellen van de LCD pinnen. rs, e, d4-d7 00009 AnalogIn LM35_1(p19); //Analoge ingang voor eerste LM35 toewijzen op welke pin. 00010 AnalogIn LM35_2(p20); //Analoge ingang voor tweede LM35 toewijzen op welke pin. 00011 Serial pc(USBTX, USBRX); //Zorgen dat we een seriële communicatie tussen computer en MBED kunnen opzetten waardoor we de printf lijnen kunnen gaan uitlezen. 00012 DigitalOut LEDJE1 (p6); //Uitgang voor LED op breadboard voor chauffage aan/uit. 00013 DigitalOut LEDJE2 (p7); //Uitgang voor LED op breadboard voor chauffage aan/uit. 00014 InterruptIn knopHOGER(p8); //Aanmaken van ingangknop voor temperatuur hoger te kunnen instellen onder interrupt. 00015 InterruptIn knopLAGER(p30); //Aanmaken van ingangknop voor temperatuur lager te kunnen instellen onder interrupt. 00016 InterruptIn aanuitknop(p5); //Aanmaken van aan/uit knop voor het systeem op of af te zetten onder interrupt. 00017 DigitalOut relais(p29); //Aanmaken van een uitgangspin voor het aansturen van de Relais. 00018 PwmOut motorout(p25); //Aanmaken van PWM pin voor het aansturen van de servo-motor onder PWM. 00019 DS1307 my1307(p9,p10); //Opstarten van de DS1307 en de pinnen voor connectie mee geven. 00020 LocalFileSystem fs("webfs"); //Instellingen voor HTTP 00021 LocalFileSystem local("local"); //Instellingen voor HTTP, /local/Project.htm gaan we gebruiken, hierbij komt ons project lokaal te staan. 00022 //////////////////////////////////////////////////////////////////////////////////// 00023 int c=0; //Aanmaken van de c variable voor HTTP, hierbij geven we deze variable de waarde 0 mee. 00024 float waarde = 25; //Aanmaken van de waarde variable voor een instel temperatuur mee te geven. 00025 float temp2; // Aanmaken van de temp2 variable, deze dient voor de temperatuur van de tweede LM35 in op te slaan. 00026 bool aanuit = 0; //Aanmaken van een variable voor te kijken of het programma/MBED aan of uit staat. 00027 float temp1; //Aanmaken van de temp1 variable, deze dient voor de temperatuur van de eerste LM35 in op te slaan. // variable aanmaken voor temp van 1ste LM35 in te steken. // variable aanmaken voor temp van 2de LM35 in te steken. 00028 float afronden; //Aanmaken van de variable afronden, deze gaat dienen 00029 float hoekverdraaiing; //Aanmaken van de variable graden, deze dient voor het weergeven van onze temperatuur waarde in °C 00030 float verschilgraden; 00031 float stand; 00032 float lijn; 00033 float counter; //We gaan de variable counter aan maken voor het tellen van hoeveel keer we op hoger of lager hebben geduwd voor de ingestelde waarde te verhogen of verlagen. 00034 float flaginstellen = 0; //We gaan de variable flaginstellen aanmaken voor te gaan kijken of wij willen gaan instellen van de waardes of het programma willen uitvoeren. 00035 int sec = 0; //We gaan de variable sec aanmaken zodat we de seconden kunnen instellen die er op ons LCD moet komen te staan. 00036 int minuten = 0; //We gaan de variable minuten aanmaken zodat we de minuten kunnen instellen die er op ons LCD moet komen te staan. 00037 int hours = 0; //We gaan de variable hours aanmaken zodat we de uren kunnen instellen die er op ons LCD moet komen te staan. 00038 int day = 0; //We gaan de variable day aanmaken zodat we de dagen kunnen instellen die er op ons LCD moet komen te staan. 00039 int date = 0; //We gaan de variable date aanmaken zodat we de datum kunnen instellen die er op ons LCD moet komen te staan. 00040 int month = 0; //We gaan de variable month aanmaken zodat we de maanden kunnen instellen die er op ons LCD moet komen te staan. 00041 int year = 0; //We gaan de variable year aanmaken zodat we de jaren kunnen instellen die er op ons LCD moet komen te staan. 00042 int junk = 0; 00043 //////////////////////////////////////////////////////////////////////////////////// 00044 DigitalOut led1(LED1, "led1"); //We gaan een digitale uitgang aanroepen namelijk de eerste LED en geven deze de naam led1. 00045 //////////////////////////////////////////////////////////////////////////////////// 00046 /* HTTP Instellingen */ 00047 EthernetNetIf eth( //We gaan de functie van ethernet opendoen om hierin de gewenste adressen in te kunnen gaan voegen. 00048 IpAddr(192,168,1,2), //Ip adres toedienen waarop de MBED verbonden word. 00049 IpAddr(255,255,255,0), //Subnetmasker voor de MBED. 00050 IpAddr(192,168,1,1), //Het IP adres waarop we gaan schrijven. 00051 IpAddr(192,168,1,1)); //Het IP adres waarvan we gaan lezen. 00052 HTTPServer svr; // Opstarten van de HTTP server met de bovenliggende eigenschappen. 00053 /* END HTTP */ 00054 //////////////////////////////////////////////////////////////////////////////////// 00055 void Hoger(void) { //Interrupt voor de ingestelde waarde hoger te zetten a.d.h.v. een drukknop. 00056 flaginstellen = 1; //Vlag voor instellen op 1 zetten, door de vlag op 1 te zetten kunnen we gaan instellen ipv het programma te runnen. 00057 waarde += 0.5; //De ingestelde waarde gaan we verhogen met 0.5°C. 00058 counter = 0; //We gaan de counter terug op 0 zetten, waardoor we terug 0 keer hebben gedrukt op de verhoog knop. 00059 wait(0.5); //We gaan 0.5 seconden wachten voordat we verder gaan zodat we zeker zijn dat er geen twee keer is gedrukt op de verhoog knop. 00060 } 00061 //////////////////////////////////////////////////////////////////////////////////// 00062 void Lager(void) { //Interrupt voor de ingestelde waarde lager te zetten a.d.h.v. een drukknop. 00063 flaginstellen = 1; //Vlag voor instellen op 1 zetten, door de vlag op 1 te zetten kunnen we gaan instellen ipv het programma te runnen. 00064 waarde -= 0.5; //De ingestelde waarde gaan we verlagen met 0.5°C. 00065 counter = 0; //We gaan de counter terug op 0 zetten, waardoor we terug 0 keer hebben gedrukt op de verhoog knop. 00066 wait(0.5); //We gaan 0.5 seconden wachten voordat we verder gaan zodat we zeker zijn dat er geen twee keer is gedrukt op de verhoog knop. 00067 } 00068 //////////////////////////////////////////////////////////////////////////////////// 00069 void AanUit(void) { //Interrupt voor de aan/uit knop. 00070 if(aanuit == 0) //Als de aanuit knop gelijk is aan gedrukt dan gaan we de volgende code uitvoeren. 00071 { 00072 aanuit = 1; //We gaan de variable aanuit terug op 1 zetten na het drukken van de knop, hierdoor doen we dit omdat anders we nooit de toestand van deze knop kunnen veranderen. 00073 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00074 lcd.printf("Opstarten..."); //We gaan het op LCD de tekst met opstarten.... laten tonen om aan te geven dat we ons systeem hebben opgezet met het drukken op de aan/uit knop 00075 motorout = (90 * 0.000511 + 0.026); //Motor op 90 graden zetten, dit is de begin toestand. 00076 temp1 = (LM35_1 * 3.22*100); // omvormen van analoge waarde naar graden celcius 00077 afronden = 2*temp1; //We gaan de temperatuur maal 2 doen. 00078 afronden = rint(afronden); //Hierna gaan we het getal afronden, door het getal te vermenigvuldigen met 2 kunnen we beter afronden. 00079 waarde = afronden/2; //Temperatuur afronden op 0.5graden 00080 wait(2); //Hierna gaan we 2s wachten zodat de MBED alles juist kan instellen en zodat we op het LCD te zien krijgen dat ons programma opstart. 00081 } 00082 else //Als de toestand van de variable gelijk is aan 0, dan voeren we de code van hieronder uit. 00083 { 00084 aanuit = 0; //We gaan de variable terug op 0 instellen waardoor we terug de variable op 1 kunnen zetten indien we het programma terug willen opstarten. 00085 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00086 lcd.printf("Uitschakelen..."); //We gaan het op LCD de tekst met uitschakelen.... laten tonen om aan te geven dat we ons systeem hebben uitgezet met het drukken op de aan/uit knop 00087 motorout = (90 * 0.000511 + 0.026); //Motor op 90 graden zetten, dit is de begin toestand. 00088 wait(2); //Hierna gaan we 2s wachten zodat de MBED alles juist kan instellen en zodat we op het LCD te zien krijgen dat ons programma opstart. 00089 } 00090 } 00091 //////////////////////////////////////////////////////////////////////////////////// 00092 void temperatuurinlezen(void) { //Interrupt voor de temperatuur inlezen. 00093 temp1 = (LM35_1 * 3.22*100); // omvormen van analoge waarde naar graden celcius 00094 afronden = 2*temp1; //We gaan de temperatuur maal 2 doen. 00095 afronden = rint(afronden); //Hierna gaan we het getal afronden, door het getal te vermenigvuldigen met 2 kunnen we beter afronden. 00096 temp1 = afronden/2; //Temperatuur afronden op 0.5graden 00097 temp2 = (LM35_2 * 3.22*100); // omvormen van analoge waarde naar graden celcius 00098 afronden = 2*temp2; //We gaan de temperatuur maal 2 doen 00099 afronden = rint(afronden); //Hierna gaan we het getal afronden, door het getal te vermenigvuldigen met 2 kunnen we beter afronden. 00100 temp2 = afronden/2; //Temperatuur afronden op 0.5graden 00101 } 00102 //////////////////////////////////////////////////////////////////////////////////// 00103 void temperatuuruitsturen(void) { //Interrupt voor de temperatuur uitlezen. 00104 if(temp1 > (waarde + 1)) { //Als de waarde van de eerste LM35 hoger is als de ingestelde waarde 00105 LEDJE1 = 1; // Lamp1 op breadboard aan "Groen". 00106 LEDJE2 = 0; // Lamp2 op breadboard uit"Rood". 00107 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00108 lcd.printf("BIN: %5.2f C",temp1); //Temperatuur binnen op LCD 00109 lcd.locate(0,1); //We gaan ons eigen op de juiste lijn van het LCD zetten, namelijk op de tweede lijn. 00110 lcd.printf("BUI: %5.2f C",temp2); //Temperatuur buiten op LCD 00111 wait(0.3); //Wachttijd 00112 relais = 0; //We gaan de relais op 0 zetten waardoor deze uitschakelt en het bijhorend LEDJE gaat doven. 00113 } 00114 else if(temp1 <= (waarde - 1) ) { //Als de waarde van de eerste LM35 lager is als de ingestelde waarde 00115 LEDJE1 = 0; // Lamp1 op breadboard uit "Groen". 00116 LEDJE2 = 1; // Lamp2 op breadboard aan "Rood". 00117 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00118 lcd.printf("BIN: %5.2f C",temp1); //Temperatuur binnen op LCD 00119 lcd.locate(0,1); //We gaan ons eigen op de juiste lijn van het LCD zetten, namelijk op de tweede lijn. 00120 lcd.printf("BUI: %5.2f C",temp2); //Temperatuur buiten op LCD 00121 wait(0.3); //Wachttijd 00122 relais = 1; //We gaan de relais op 1 zetten waardoor deze inschakelt en het bijhorend LEDJE gaat aangaan. 00123 } 00124 } 00125 //////////////////////////////////////////////////////////////////////////////////// 00126 void motor(float graden) { //Interrupt voor de toestand van de servo-motor. 00127 if ( (graden > 20) && (graden < 160) ) { //Als de ingegeven graden groter is als de begin waarde en alsook kleiner is als de grootste waarde dan de code van hieronder uitoeren. 00128 motorout = (graden * 0.000511 + 0.026); //We gaan de motor laten draaien naar de gewenste graden die afhankelijk is van het temperatuurverschil. 00129 } 00130 else if (graden >= 160){ //Als het temperatuur verschil groter word als 160° dan gaan we de motor op zijn laatste positie namelijk 160° laten staan waardoor we zien dat we een maximaal temperatuurverschil hebben. 00131 motorout = (160 * 0.000511 + 0.026); //Beveiliging => niet boven 160graden 00132 } 00133 else { 00134 motorout = (20 * 0.000511 + 0.026); //Beveiliging => niet onder 20 graden 00135 } 00136 return; 00137 } 00138 //////////////////////////////////////////////////////////////////////////////////// 00139 void initHTTP(void) { //Interrupt voor het HTTP protocol. 00140 printf("Start initialisatie HTTP\r\n"); //We gaan op het LCD schrijven dat we bezigz zijn met de intialisering van het LCD 00141 EthernetErr ethErr; //Error variabele aanmaken 00142 int count = 0; 00143 do { 00144 printf("Setting up %d...\n\r", ++count); 00145 ethErr = eth.setup(); //Ethernet poort starten, variabele toekennen aan de setup 00146 if (ethErr) printf("Timeout\n\r", ethErr); //Als er een fout is timeout geven 00147 } 00148 while (ethErr != ETH_OK); //Zolang er geen fout is 00149 printf("Connected OK\n\r"); 00150 const char* hwAddr = eth.getHwAddr(); //Adres krijgen 00151 IpAddr ethIp = eth.getIp(); //Ip adres opvragen 00152 printf("IP address : %d.%d.%d.%d\n\r", ethIp[0], ethIp[1], ethIp[2], ethIp[3]); 00153 svr.addHandler<SimpleHandler>("/hello"); //HTTPS server request handler 00154 svr.addHandler<FSHandler>(""); //Handler voor file weg te schrijven 00155 svr.bind(80); //Server binden aan poort 80 00156 printf("Server listening\n\r"); //Laten zien dat onze server luistert, waardoor we kunnen zenden van data. 00157 } 00158 //////////////////////////////////////////////////////////////////////////////////// 00159 void klokophalen() { //Interrupt voor de tijd op ons LCD te krijgen. 00160 my1307.gettime(&sec, &minuten, &hours, &day, &date, &month, &year); //De tijden van de klok ophalen en laten tonen op het LCD 00161 } 00162 //////////////////////////////////////////////////////////////////////////////////// 00163 void klokuitsturen() { //Interrupt voor de CLK. 00164 klokophalen(); //De tijden van de klok ophalen 00165 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken.kunt g 00166 lcd.locate(0,0); //Eerste lijn van het LCD 00167 lcd.printf("%d:%d:%d",hours,minuten,sec); //Tijd op LCD zetten 00168 lcd.locate(0,1); //Tweede lijn van het LCD 00169 lcd.printf("%d/%d/%d",date,month,year); //Datum op LCD zetten 00170 } 00171 //////////////////////////////////////////////////////////////////////////////////// 00172 void hoekverdraaiingbepalen(float verschilgraden,float temperatuurbuiten) { 00173 float startstand; 00174 00175 //Bepalen op welke stand hij staat (Waar hij op de belastingslijn is) 00176 if (verschilgraden < -1.5) { 00177 stand = -2; 00178 } 00179 else if( (-1.5 <= verschilgraden) && (verschilgraden < -0.5) ){ 00180 stand = -1; 00181 } 00182 else if ( (-0.5 <= verschilgraden) && (verschilgraden <= 0.5) ) { 00183 stand = 0; 00184 } 00185 else if ( (0.5 < verschilgraden) && (verschilgraden <= 1.5) ) { 00186 stand = 1; 00187 } 00188 else { 00189 stand = 2; 00190 } 00191 00192 //Bepalen van belastingslijn// 00193 printf("Temperatuurbuiten: %f\n\r", temperatuurbuiten); 00194 if ( temperatuurbuiten < 23 ){ 00195 startstand = 125; //Belastingslijn 1 00196 printf("Temperatuurbuiten is kleiner dan -5 graden.\r\n"); 00197 } 00198 else if ( (23 <= temperatuurbuiten) && (temperatuurbuiten <= 25) ){ 00199 startstand = 90; //Belastingslijn 2 00200 printf("Temperatuurbuiten is tussen -5 en 10 graden.\r\n"); 00201 } 00202 else { 00203 startstand = 55; //Belastingslijn 3 00204 printf("Temperatuurbuiten is groter dan 10 graden.\r\n"); 00205 } 00206 00207 //Bepalen van graden// 00208 hoekverdraaiing = startstand + (stand * 35); 00209 if (hoekverdraaiing > 160) { //Beveiliging 00210 hoekverdraaiing = 160; 00211 } 00212 else if (hoekverdraaiing < 20){ //Beveiliging 00213 hoekverdraaiing = 20; 00214 } 00215 00216 } 00217 //////////////////////////////////////////////////////////////////////////////////// 00218 int main(void) 00219 { 00220 /* START INITIALISATIE */ 00221 knopHOGER.rise(&Hoger); //Knop hoger instellen. 00222 knopLAGER.rise(&Lager); //Knop lager inestellen 00223 aanuitknop.rise(&AanUit); //Knop aan&uit instellen 00224 initHTTP(); //HTTP initialiseren 00225 Timer tm; //Timer selecteren 00226 tm.start(); //Timer starten 00227 /* STOP INITIALISATIE */ 00228 while(true) { //While lus 00229 if( (aanuit == 1) && (flaginstellen == 0) ) { //open if functie 00230 temperatuurinlezen(); //Inlezen van temperatuur 00231 temperatuuruitsturen(); //Uitsturen van temperatuur 00232 klokophalen(); //Ophalen van de klok waarde voor datum en tijd 00233 /* START HTTP */ 00234 printf("Net poll start\r\n"); //Printen op de Computer voor Theratherm 00235 Net::poll(); 00236 if (tm.read() > 0.5) { //Open IF functie 00237 led1 = !led1; //Led aan of uit sturen 00238 tm.start(); //Start timer 00239 c++; //Optellen zodat om de 1s de gegevens worden doorgestuurd 00240 } 00241 printf("Net poll gedaan\r\n"); 00242 if (c==1) { //Als we gaan zenden dan gaan we de code van hieronder uitvoeren tijdens het zenden van de data. 00243 printf("Ik probeer nu de file te openen..\r\n"); 00244 //FILE *fp = fopen("/webfs/mydata.htm","w"); 00245 FILE *fp = fopen("/local/Project.htm", "w"); // Open "Test.htm" on the local file system for writing 00246 printf("File geopend!\r\n"); //Print 00247 fprintf(fp,"<HTML>\r\n"); //HTML opstarten 00248 fprintf(fp,"<HEAD>\r\n"); //Head van het bestand open zetten. 00249 fprintf(fp,"<script type=\"text/javascript\">window.setTimeout(function(){ document.location.reload(true); }, 3000);</script>");//Script laden 00250 fprintf(fp,"<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\">");//Stijl van het document laden 00251 fprintf(fp,"<style>\r\n");//De style toepassen die is opgevraagd 00252 fprintf(fp,"tbody {background:#FF6666;}");//Achtergrond veranderen van kleur 00253 fprintf(fp,"</style>\r\n");//De aangemaakt stijl terug sluiten 00254 fprintf(fp,"</HEAD>\r\n");//Sluiten van de HEAD 00255 fprintf(fp,"<BODY>\r\n");//Sluiten van de BODY 00256 /* TEST BOOTSTRAP */ 00257 fprintf(fp,"<div class=\"container\">\r\n"); 00258 fprintf(fp,"<div class=\"panel panel-success\">"); 00259 fprintf(fp,"<div class=\"panel-heading\">%d:%d:%d %d/%d/%d</div>",hours,minuten,sec,date,month,year); 00260 fprintf(fp,"<table class=\"table\">");//Aanmaken van tabel 00261 fprintf(fp,"<thead><tr><th>Temperatuur binnen</th><th>Temperatuur buiten</th></tr></thead>"); 00262 fprintf(fp,"<tbody><tr><td>%.1f °C</td>",temp1);//Kiezen waar we temp1 in de tabel gaan steken 00263 fprintf(fp,"<td>%.1f °C</td></tr></tbody></table></div>",temp2);//Kiezen waar we temp2 in de tabel gaan steken. 00264 /* END TEST BOOTSTRAP */ 00265 fprintf(fp,"</div>"); 00266 printf("Variabelen printen\r\n"); 00267 fprintf(fp,"</BODY>\r\n"); 00268 fprintf(fp,"</HTML>\r\n"); 00269 printf("Sessie stoppen \r\n"); 00270 fclose(fp);//Stop schrijven 00271 printf("staat online\r\n"); 00272 c=0; 00273 } 00274 /* EINDE HTTP */ 00275 /* Motor sturing hier */ 00276 verschilgraden = waarde - temp1; 00277 printf("Verschilgraden: %f\n\r", verschilgraden); 00278 hoekverdraaiingbepalen(verschilgraden,temp2); 00279 printf("Stand: %f\n\r", stand); 00280 printf("Hoekverdraaiing: %f\n\r", hoekverdraaiing); 00281 wait(1); 00282 motor(hoekverdraaiing); //Motor aansturen 00283 /* Stop motor sturing hier */ 00284 } 00285 else if( (aanuit == 1) && (flaginstellen == 1) ) { //open else if 00286 /* Programmatie instellen */ 00287 printf("Programma instelmodus aan\r\n"); 00288 while (counter <= 3) { 00289 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00290 lcd.printf("BIN: %5.2f C",waarde); //Printen van de binnen temp 00291 lcd.locate(0,1); //Tweede lijn van LCD 00292 lcd.printf("BUI: %5.2f C",temp2); // Printen van de buiten temp 00293 wait(0.8); //Wachttijd 00294 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00295 lcd.printf(""); //Lcd laten flikkeren voor instellen 00296 lcd.locate(0,1); // Tweede lijn van het LCd 00297 lcd.printf("BUI: %5.2f C",temp2); //Printen van de buiten temp 00298 wait(0.2); //Wachttijd 00299 counter++; //Counter incrementeren met 1 00300 } 00301 flaginstellen = 0; //Instellen stoppen 00302 } 00303 else { //open else 00304 lcd.cls(); //We gaan het LCD refreshen of m.a.w. het LCD leegmaken. 00305 klokuitsturen(); //De waarde van de klok op de LCD zetten 00306 printf("Staat uit\r\n"); 00307 } //sluit else 00308 } 00309 }
Generated on Tue Jul 12 2022 17:03:59 by
1.7.2