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
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
--- /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
--- /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
--- /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
+ }
+ }
+}
--- /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