![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Embedded C project:18/12/2014
Dependencies: DS1307 TextLCD mbed
main.cpp
- Committer:
- ninoderkinderen
- Date:
- 2014-12-18
- Revision:
- 0:8d87bc453349
File content as of revision 0:8d87bc453349:
//library's #include "mbed.h" #include "TextLCD.h" #include "ds1307.h" #include "EthernetNetIf.h" //#include "HTTPClient.h" //#include "NTPClient.h" #include "HTTPServer.h" #include "RPCFunction.h" //Pin initialisatie AnalogIn binnen(p19);//pin 19:Analog In AnalogIn buiten(p20);//pin 20:Analog In TextLCD lcd(p15, p16, p21, p22, p23, p24); //rs, e, d4-d7 InterruptIn knopUP(p6);//pin6:Interrupt InterruptIn knopDOWN(p5);//pin5:Interrupt InterruptIn knopINSTEL(p7);//pin7:Interrupt InterruptIn knopBACK(p8);//pin8:Interrupt DS1307 my1307(p9, p10);//pin9:sda I2C DigitalOut relais(p30);//pin10:scl I2C DigitalOut RGBblauw(p29);//pin29:digital out DigitalOut RGBgroen(p28);//pin28:digital out DigitalOut RGBrood(p27);//pin27:digital out PwmOut Servo(p25);//p25:pwm out Serial pc(USBTX,USBRX);//serial port:USB DigitalOut led1(LED1, "led1"); /* HTTP Instellingen */ EthernetNetIf eth( //We gaan de functie van ethernet opendoen om hierin de gewenste adressen in te kunnen gaan voegen. IpAddr(192,168,1,2), //Ip adres toedienen waarop de MBED verbonden word. IpAddr(255,255,255,0), //Subnetmasker voor de MBED. IpAddr(192,168,1,1), //Het IP adres waarop we gaan schrijven. IpAddr(192,168,1,1)); //Het IP adres waarvan we gaan lezen. HTTPServer svr; // Opstarten van de HTTP server met de bovenliggende eigenschappen. /* END HTTP */ //variabelen float i = 0;//waarde om binnentempertauur in te steken float j = 0;//waarde om buitentemperatuur in te steken int reftemp = 20;//referentietemperatuur int load=0;//load program int tellertijd =0;//uit tijdsuitlezing te geraken int c=0; //variabelen RTC int sec; int minu; int hours; int day; int date; int month; int year; //RTC read routine void test_rw(int test) { } //interruptroutine: referentietemp instellen void instellen() { knopDOWN.rise(NULL); knopUP.rise(NULL);//interrupt disable wait(0.5); while(knopINSTEL == 0) { lcd.locate(0,0); lcd.printf(" Instellen Temp"); lcd.locate(0,1); lcd.printf(" Temp = %iC", reftemp);//Printen ingestelde referentietemp if(knopUP == 1)//knopUP bediend --> reftemp +1 { reftemp++; wait(0.4); } if(knopDOWN == 1)//knopDOWN bediend --> reftemp -1 { reftemp--; wait(0.4); } if (reftemp == 33)//hysteresis reftemp { reftemp = 15; } if (reftemp == 14)//hysteresis reftemp { reftemp = 32; } } } //interruptroutine: tijdsweergave void back() { wait(0.3); tellertijd=0; lcd.cls();//LCD clead knopBACK.rise(NULL); knopUP.rise(NULL);//disable interrupt while(tellertijd < 50)//doorolopen wanneer knopBack NIET is ingedrukt,bij bediening uit routine { test_rw(my1307.gettime( &sec, &minu, &hours, &day, &date, &month, &year));//uitlezen tijd RTC //Dag uitschrijven op lcd if(day == 1) {lcd.locate(3,1); lcd.printf("Ma");} if(day == 2) {lcd.locate(3,1); lcd.printf("Di");} if(day == 3) {lcd.locate(3,1); lcd.printf("Wo");} if(day == 4) {lcd.locate(3,1); lcd.printf("Do");} if(day == 5) {lcd.locate(3,1); lcd.printf("Vr");} if(day == 6) {lcd.locate(3,1); lcd.printf("Za");} if(day == 7) {lcd.locate(3,1); lcd.printf("Zo");} test_rw(my1307.gettime( &sec, &minu, &hours, &day, &date, &month, &year));//uitlezen tijd RTC //Uur min sec //Dag datum maand jaar if(sec >= 9 && minu >= 9 && hours >= 9) { lcd.locate(4,0); lcd.printf("%d:%d:%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec <= 9 && minu >= 9 && hours >= 9) { lcd.locate(4,0); lcd.printf("%d:%d:0%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec >= 9 && minu <= 9 && hours >= 9) { lcd.locate(4,0); lcd.printf("%d:0%d:%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec >= 9 && minu >= 9 && hours <= 9) { lcd.locate(4,0); lcd.printf("0%d:%d:%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec <= 9 && minu <= 9 && hours >= 9) { lcd.locate(4,0); lcd.printf("%d:0%d:0%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec <= 9 && minu >= 9 && hours <= 9) { lcd.locate(4,0); lcd.printf("0%d:%d:0%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec >= 9 && minu <= 9 && hours <= 9) { lcd.locate(4,0); lcd.printf("0%d:0%d:%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } if(sec <= 9 && minu <= 9 && hours <= 9) { lcd.locate(4,0); lcd.printf("0%d:0%d:0%d",hours,minu,sec); lcd.locate(6,1); lcd.printf("%d/%d/%d",date,month,year); } wait(0.2); tellertijd++; } } //interruptroutine: start programma void start() { knopINSTEL.rise(NULL); knopBACK.rise(NULL); knopDOWN.rise(NULL); knopUP.rise(NULL);//disable interrupt lcd.cls();//LCD clear /*OPSTART ROUTINE START*/ lcd.locate(0,0); lcd.printf("SYSTEM START"); lcd.locate(0,1); lcd.printf("LOAD PROGRAM"); wait(2); lcd.cls(); lcd.locate(0,0); lcd.printf("SYSTEM START"); lcd.locate(0,1); lcd.printf("LOAD: %d",load); for(int l=0;l<=40;l++) { load = l; lcd.locate(0,1); lcd.printf("LOAD: %d",load); wait(0.1); } wait(1); for(int l=40;l<=70;l++) { load = l; lcd.locate(0,1); lcd.printf("LOAD: %d",load); wait(0.2); } wait(1); for(int l=70;l<=100;l++) { load = l; lcd.locate(0,1); lcd.printf("LOAD: %d",load); wait(0.2); } wait(1); lcd.cls(); lcd.locate(0,0); lcd.printf("SYSTEM START"); lcd.locate(0,1); lcd.printf("PROGRAM START"); wait(3); /*OPSTARTROUTINE END*/ } //interruptroutine: programma stoppen void afsluiten() { knopUP.rise(&start);//interrupt koppelen met routine knopINSTEL.rise(NULL); knopBACK.rise(NULL); knopDOWN.rise(NULL);//disabel interrupt lcd.cls();//lcd clear /*AFSLUITROUTINE START*/ lcd.locate(0,0); lcd.printf("SYSTEM SHUTDOWN"); wait(2); relais = 0;//relais uit RGBrood = 0; RGBgroen = 0; RGBblauw = 0; //RGB uit while(knopUP == 0) { lcd.cls(); lcd.locate(0,0); lcd.printf("SYSTEM OFF"); wait(0.2); } /*AFSLUITROUTINE END*/ } /*MAIN PROGRAM*/ int main() { wait(1); while(1) { 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"); knopINSTEL.rise(&instellen); knopBACK.rise(&back); knopDOWN.rise(&afsluiten);//interrupts koppelen met routines(bovenaan gedeclareerd) i=0; j=0;//variabele temperatuurwaardes 0 zetten for(int a=0;a<5;a++) { for(int t=0;t<100;t++) { i=i+binnen.read(); //uitlezen temp } for(int k=0;k<100;k++) { j=j+buiten.read(); //uitlezen temp } wait(0.1); } i = (i*3.3)/5; j = (j*3.3)/5;//berekening juiste temperatuur: Waarde*3.3V/5(for lus van 5) lcd.cls();//lcd clear lcd.locate(0,0); lcd.printf("Binnen:%4.1fC", i); lcd.locate(0,1); lcd.printf("Buiten:%4.1fC", j);//LCD print temperaturen wait(1); pc.printf("\n\n\rTemperatuur binnen: %4.1f C",i); pc.printf("\n\n\rTemperatuur buiten: %4.1f C",j); pc.printf("\n\n\r------------------------------------------");//PC print temperaturen wait(0.5); if(i > (reftemp + 2) && i <= (reftemp +4))//Temperatuur te HOOG: reftemp >2 en reftemp <=4 { wait(2); relais = 1;//relais aan RGBrood = 1; RGBgroen = 1; RGBblauw = 0;//rgb rood + groen = oranje wait(1); Servo.period_ms(20);//servo pwm periode Servo = (130 * 0.000511 + 0.026); // rechts-half servo } else if(i > (reftemp + 3.5))//Temperatuur te HOOG: reftemp > 3.5 (hysteresis ingebouwd) { wait(2); relais = 1;//relais aan RGBrood = 1; RGBgroen = 0; RGBblauw = 0;//rgb rood wait(1); Servo.period_ms(20);//servo pwm periode Servo = (160 * 0.000511 + 0.026); // rechts servo } else if(i < (reftemp - 2) && i >= (reftemp -4))//Temperatuur te LAAG: reftemp>2 & reftemp <4 { wait(2); relais = 0;//relais uit RGBrood = 1; RGBgroen = 0; RGBblauw = 1;//rgb rood + blauw= paars wait(1); Servo.period_ms(20);//servo pwm periode Servo = (55 * 0.000511 + 0.026); // links-half servo } else if(i < (reftemp - 3.5))//Temperatuur te LAAG: reftemp>4 { wait(2); relais = 0;//relais uit RGBrood = 0; RGBgroen = 0; RGBblauw = 1;//rgb blauw wait(1); Servo.period_ms(20);//servo pwm period Servo = (5 * 0.000511 + 0.026); // links servo } else//Temperatuur OKE: reftemp binnen hysteresis +2 & -2 { wait(1); relais = 0; RGBrood = 0; RGBgroen = 1; RGBblauw = 0;//rgb groen wait(1); Servo.period_ms(20);//servo pwm period Servo = (90 * 0.000511 + 0.026); // 0-positie servo } wait(1); printf("Doorlopen\r\n"); FILE *fp = fopen("/webfs/mydata.htm","w"); fprintf(fp,"<HTML>\r\n"); //HTML opstarten fprintf(fp,"<HEAD>\r\n"); //Head van het bestand open zetten. fprintf(fp,"<script type=\"text/javascript\">window.setTimeout(function(){ document.location.reload(true); }, 3000);</script>");//Script laden fprintf(fp,"<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\">");//Stijl van het document laden fprintf(fp,"<style>\r\n");//De style toepassen die is opgevraagd fprintf(fp,"tbody {background:#FF8866;}");//Achtergrond veranderen van kleur fprintf(fp,"</style>\r\n");//De aangemaakt stijl terug sluiten fprintf(fp,"</HEAD>\r\n");//Sluiten van de HEAD fprintf(fp,"<BODY>\r\n");//Sluiten van de BODY fprintf(fp,"<div class=\"container\">\r\n"); fprintf(fp,"<div class=\"panel panel-success\">"); fprintf(fp,"<table class=\"table\">");//Aanmaken van tabel fprintf(fp,"<thead><tr><th>binnen</th><th>buiten</th></tr></thead>"); fprintf(fp,"<tbody><tr><td>%.1f °C</td>",i); fprintf(fp,"<td>%.1f °C</td></tr></tbody></table></div>",j); fprintf(fp,"</div>"); printf("Variabelen printen\r\n"); fprintf(fp,"</BODY>\r\n"); fprintf(fp,"</HTML>\r\n"); printf(" %f + %f",i,j); printf("Sessie stoppen \r\n"); fclose(fp); wait(1); } }