Berckvens Michiel & Basteyns Jonas
Dependencies: DS1307 TextLCD mbed
main.cpp
- Committer:
- Michielber
- Date:
- 2014-12-04
- Revision:
- 2:6330f557c82e
- Parent:
- 1:691e8c893065
- Child:
- 3:201eb46eb4ab
File content as of revision 2:6330f557c82e:
#include "mbed.h" #include "TextLCD.h" #include "ds1307.h" #include "EthernetNetIf.h" //#include "HTTPClient.h" //#include "NTPClient.h" #include "HTTPServer.h" #include "RPCFunction.h" TextLCD lcd(p21, p22, p23, p24, p27, p28); // rs, e, d4-d7 AnalogIn LM35_1(p19); // Analoge ingang voor LM35 toewijzen op welke pin. AnalogIn LM35_2(p20); // Analoge ingang voor LM35 toewijzen op welke pin. Serial pc(USBTX, USBRX); //Zorgen dat we een seriele communicatie tussen computer en MBED kunnen opzetten. DigitalOut LEDJE1 (p6); // Uitgang voor LED op breadboard. DigitalOut LEDJE2 (p7); // Uitgang voor LED op breadboard. InterruptIn knopHOGER(p8); // Aanmaken van ingang voor drukknopje voor hogere temp InterruptIn knopLAGER(p30); // Aanmaken van ingang voor drukknopje voor lagere temp DigitalOut myled1(LED1); // Aanmaken van LED van MBED te gerbuiken voor hogere temp DigitalOut myled2(LED2); // Aanmaken van LED van MBED te gerbuiken voor lagere temp InterruptIn aanuitknop(p5); DigitalOut relais(p29); PwmOut motorout(p25); DS1307 my1307(p9,p10); // start DS1307 class and give it pins for connections of the DS1307 device LocalFileSystem fs("webfs"); //Instellingen voor HTTP LocalFileSystem local("local"); //Instellingen voor HTTP, /local/Project.htm gaan we gebruiken int c=0; float waarde = 25; float temp2; bool aanuit = 0; float temp1; // variable aanmaken voor temp van 1ste LM35 in te steken. // variable aanmaken voor temp van 2de LM35 in te steken. float afronden; float graden; float counter; float flaginstellen = 0; int sec = 0; int minuten = 0; int hours = 0; int day = 0; int date = 0; int month = 0; int year = 0; int junk = 0; DigitalOut led1(LED1, "led1"); /* HTTP Instellingen */ EthernetNetIf eth( IpAddr(192,168,1,2), //Ip adress toedienen IpAddr(255,255,255,0), //Subnetmasker IpAddr(192,168,1,1), IpAddr(192,168,1,1)); //HTTPClient http; //NTPClient ntp; HTTPServer svr; /* END HTTP */ void Hoger(void) { //Interrupt voor de ingestelde waarde hoger te zetten flaginstellen = 1; //Vlag voor instellen op 1 zetten waarde += 0.5; //Waarde hoger zetten counter = 0; //Insteltijd resetten wait(0.5); } void Lager(void) { //Interrupt voor de ingestelde waarde hoger te zetten flaginstellen = 1; //Vlag voor instellen op 1 zetten waarde -= 0.5; //Waarde lager zetten counter = 0; //Insteltijd resetten wait(0.5); } void AanUit(void) { if(aanuit == 0) { aanuit = 1; lcd.cls(); lcd.printf("Opstarten..."); motorout = (20 * 0.000511 + 0.026); //Motor op 20 graden zetten temp1 = (LM35_1 * 3.22*100); // omvormen van analoge waarde naar graden celcius afronden = 2*temp1; afronden = rint(afronden); waarde = afronden/2; wait(2); }else { aanuit = 0; lcd.cls(); lcd.printf("Uitschakelen..."); motorout = (20 * 0.000511 + 0.026); //Motor terug op 20 graden zetten wait(2); } } void temperatuurinlezen(void) { temp1 = (LM35_1 * 3.22*100); // omvormen van analoge waarde naar graden celcius afronden = 2*temp1; afronden = rint(afronden); temp1 = afronden/2; //Temperatuur afronden op 0.5graden temp2 = (LM35_2 * 3.22*100); // omvormen van analoge waarde naar grade celcius afronden = 2*temp2; afronden = rint(afronden); temp2 = afronden/2; //Temperatuur afronden op 0.5graden } void temperatuuruitsturen(void) { if(temp1 > (waarde + 1)) { //Als de waarde van de eerste LM35 hoger is als de ingestelde waarde LEDJE1 = 1; // Lamp1 op breadboard aan. LEDJE2 = 0; // Lamp2 op breadboard uit. lcd.cls(); lcd.printf("BIN: %5.2f C",temp1); //Temperatuur binnen op LCD lcd.locate(0,1); lcd.printf("BUI: %5.2f C",temp2); //Temperatuur buiten op LCD wait(0.3); relais = 0; // Een halve seconden wachten, zodat we onze temperatuur kunnen aflezen op het scherm. } else if(temp1 <= (waarde - 1) ) { //Als de waarde van de eerste LM35 lager is als de ingestelde waarde LEDJE1 = 0; // Lamp1 op breadboard uit. LEDJE2 = 1; // Lamp2 op breadboard aan. lcd.cls(); lcd.printf("BIN: %5.2f C",temp1); lcd.locate(0,1); lcd.printf("BUI: %5.2f C",temp2); wait(0.3); // Een halve seconden wachten, zodat we onze temperatuur kunnen aflezen op het scherm. relais = 1; } } void motor(float graden) { if ( (graden > 20) && (graden < 160) ) { motorout = (graden * 0.000511 + 0.026); } else if (graden >= 160){ motorout = (160 * 0.000511 + 0.026); //Beveiliging => niet boven 160graden } else { motorout = (20 * 0.000511 + 0.026); //Beveiliging => niet onder 20 graden } return; } void initHTTP(void) { printf("Start initialisatie HTTP\r\n"); EthernetErr ethErr; int count = 0; do { printf("Setting up %d...\n\r", ++count); ethErr = eth.setup(); if (ethErr) printf("Timeout\n\r", ethErr); } while (ethErr != ETH_OK); printf("Connected OK\n\r"); const char* hwAddr = eth.getHwAddr(); IpAddr ethIp = eth.getIp(); printf("IP address : %d.%d.%d.%d\n\r", ethIp[0], ethIp[1], ethIp[2], ethIp[3]); //LocalFileSystem fs("webfs"); svr.addHandler<SimpleHandler>("/hello"); svr.addHandler<FSHandler>(""); svr.bind(80); printf("Server listening\n\r"); } void klokophalen() { my1307.gettime(&sec, &minuten, &hours, &day, &date, &month, &year); //De tijden van de klok ophalen } void klokuitsturen() { klokophalen(); //De tijden van de klok ophalen lcd.cls(); lcd.locate(0,0); lcd.printf("%d:%d:%d",hours,minuten,sec); //Tijd op LCD zetten lcd.locate(0,1); lcd.printf("%d/%d/%d",date,month,year); //Datum op LCD zetten } int main(void) { /* START INITIALISATIE */ knopHOGER.rise(&Hoger); knopLAGER.rise(&Lager); aanuitknop.rise(&AanUit); initHTTP(); Timer tm; tm.start(); /* STOP INITIALISATIE */ while(true) { if( (aanuit == 1) && (flaginstellen == 0) ) { //open if temperatuurinlezen(); temperatuuruitsturen(); klokophalen(); /* START HTTP */ printf("Net poll start\r\n"); Net::poll(); if (tm.read() > 0.5) { led1 = !led1; tm.start(); //Start timer c++; //Optellen zodat om de 1s de } printf("Net poll gedaan\r\n"); if (c==1) { printf("Ik probeer nu de file te openen..\r\n"); //FILE *fp = fopen("/webfs/mydata.htm","w"); FILE *fp = fopen("/local/Project.htm", "w"); // Open "Test.htm" on the local file system for writing printf("File geopend!\r\n"); fprintf(fp,"<HTML>\r\n"); fprintf(fp,"<HEAD>\r\n"); fprintf(fp,"</HEAD>\r\n"); fprintf(fp,"<BODY>\r\n"); fprintf(fp," \r\n"); printf("Variabelen printen\r\n"); fprintf(fp,"De binnen temperatuur is %f\r\n",temp1); fprintf(fp," \r\n"); fprintf(fp,"De buiten temperatuur is %f\r\n",temp2); fprintf(fp," \r\n"); fprintf(fp,"De tijd is: %d:%d:%d",hours,minuten,sec); fprintf(fp," \r\n"); fprintf(fp,"De datum is: %d/%d/%d",date,month,year); fprintf(fp," \r\n"); fprintf(fp,"</BODY>\r\n"); fprintf(fp,"</HTML>\r\n"); printf("Sessie stoppen \r\n"); fclose(fp); //Stop schrijven printf("staat online\r\n"); c=0; } /* EINDE HTTP */ /* Motor sturing hier */ graden = waarde - temp1; graden = 20 + (graden*5); //5 Graden per Graad celsius. (Max 28 graden) motor(graden); //Motor aansturen /* Stop motor sturing hier */ } //sluit if else if( (aanuit == 1) && (flaginstellen == 1) ) { //open else if /* Programmatie instellen */ printf("Programma instelmodus aan\r\n"); while (counter <= 3) { lcd.cls(); lcd.printf("BIN: %5.2f C",waarde); lcd.locate(0,1); lcd.printf("BUI: %5.2f C",temp2); wait(0.8); lcd.cls(); lcd.printf(""); //Lcd laten flikkeren voor instellen lcd.locate(0,1); lcd.printf("BUI: %5.2f C",temp2); wait(0.2); counter++; } flaginstellen = 0; //Instellen stoppen } else { //open else lcd.cls(); //LCD Clearen klokuitsturen(); //De waarde van de klok op de LCD zetten printf("Staat uit\r\n"); } //sluit else } }