Project embedded C:16/12/2014
Dependencies: DS1307 TextLCD mbed
Revision 0:9bf4c3c71b7a, committed 2014-12-16
- Comitter:
- ninoderkinderen
- Date:
- Tue Dec 16 14:23:38 2014 +0000
- Commit message:
- Project embedded C: programma 16/12/2014
Changed in this revision
diff -r 000000000000 -r 9bf4c3c71b7a DS1307.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DS1307.lib Tue Dec 16 14:23:38 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/harrypowers/code/DS1307/#c3e4da8feb10
diff -r 000000000000 -r 9bf4c3c71b7a TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Tue Dec 16 14:23:38 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
diff -r 000000000000 -r 9bf4c3c71b7a main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Dec 16 14:23:38 2014 +0000 @@ -0,0 +1,330 @@ +//library's +#include "mbed.h" +#include "TextLCD.h" +#include "ds1307.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 +//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 +//variabelen RTC + int sec; + int min; + int hours; + int day; + int date; + int month; + int year; + //RTC read routine + void test_rw(int test) { +} +//interruptroutine: referentietemp instellen +void instellen() +{ + knopINSTEL.rise(NULL); + 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.5); + lcd.cls();//LCD clead + knopBACK.rise(NULL); + knopUP.rise(NULL);//disable interrupt + while(knopBACK == 0)//doorolopen wanneer knopBack NIET is ingedrukt,bij bediening uit routine + { + test_rw(my1307.gettime( &sec, &min, &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");} + wait(0.2); + test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));//uitlezen tijd RTC + //Uur min sec //Dag datum maand jaar + if(sec >= 9 && min >= 9 && hours >= 9) + { + lcd.locate(4,0); + lcd.printf("%d:%d:%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec <= 9 && min >= 9 && hours >= 9) + { + lcd.locate(4,0); + lcd.printf("%d:%d:0%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec >= 9 && min <= 9 && hours >= 9) + { + lcd.locate(4,0); + lcd.printf("%d:0%d:%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec >= 9 && min >= 9 && hours <= 9) + { + lcd.locate(4,0); + lcd.printf("0%d:%d:%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec <= 9 && min <= 9 && hours >= 9) + { + lcd.locate(4,0); + lcd.printf("%d:0%d:0%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec <= 9 && min >= 9 && hours <= 9) + { + lcd.locate(4,0); + lcd.printf("0%d:%d:0%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec >= 9 && min <= 9 && hours <= 9) + { + lcd.locate(4,0); + lcd.printf("0%d:0%d:%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + if(sec <= 9 && min <= 9 && hours <= 9) + { + lcd.locate(4,0); + lcd.printf("0%d:0%d:0%d",hours,min,sec); + lcd.locate(6,1); + lcd.printf("%d/%d/%d",date,month,year); + } + wait(0.3); + } +} +//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() +{ + while(1) + { + 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(0.1); + wait(2); + 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 + 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 + } + } +}
diff -r 000000000000 -r 9bf4c3c71b7a mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Dec 16 14:23:38 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file