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 Servo TextLCD mbed
Diff: main.cpp
- Revision:
- 0:b0e0ec2415bc
- Child:
- 1:8aada2d4df12
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Dec 18 09:51:25 2014 +0000
@@ -0,0 +1,244 @@
+//Project_02
+#include "mbed.h"
+#include "TextLCD.h"
+#include "Servo.h"
+#include "ds1307.h"
+
+DigitalOut ledr(p5); //RGB led rood
+DigitalOut ledg(p6); //RGB led groen
+DigitalOut ledb(p7); //RGB led blauw
+DigitalOut relais(p8); //Relais
+DS1307 my1307(p9,p10); //start DS1307 class and give it pins for connections of the DS1307 device
+InterruptIn push1(p11); //drukknop onder interrupt mogelijk (hoger)
+InterruptIn push2(p12); //drukknop onder interrupt mogelijk (lager)
+InterruptIn push3(p13); //drukknop onder interrupt mogelijk (bevestigen)
+InterruptIn push4(p14); //drukknop onder interrupt mogelijk (anuleren)
+AnalogIn temp01(p19); //LM35 Binnen
+AnalogIn temp02(p20); //LM35 Buiten
+PwmOut myservo(p22); //Servo motor met pwm
+PwmOut LCDBack(p21); //backlight LCD control
+TextLCD lcd(p25, p26, p27, p28, p29, p30); //LCD
+
+float licht=0; //backlight
+float vorig_licht=0; //backlight onthouden van waarde
+float i=0; //temperatuur 01
+float j=0; //temperatuur 02
+float ingesteld=21; //ingestelde temperatuur
+float vorige_instelling=21; //ingestelde temperatuur onthouden van waarde
+
+int sec; //RTC
+int min; //RTC
+int hours; //RTC
+int day; //RTC
+int date; //RTC
+int month; //RTC
+int year; //RTC
+
+void test_rw(int test) { //RTC Klok
+}
+
+void menu(void){
+ lcd.cls(); //Menu load screen (anti dender, als de knop te lang word
+ lcd.locate(0,0); //ingedrukt kan dit per ongeluk al een volgende functie
+ lcd.printf("******Menu******"); //starten vandaar dit load screen om dit te vermijden.
+ lcd.locate(0,1); //men kan ook gewoon een wait plaatsen van een seconde.)
+ lcd.printf("Laden ."); //en clear LCD
+ wait(0.5);
+ lcd.locate(0,1);
+ lcd.printf("Laden ..");
+ wait(0.5);
+ lcd.locate(0,1);
+ lcd.printf("Laden ...");
+ wait(0.5);
+ while(push4 == 0){ //while anuleren niet is in gedrukt
+ while(push1 == 0 && push2 == 0 && push4 == 0){ //while drukknoppen 1,2 en 4 niet ingedrukt zijn
+ ledr = 0; //aansturing RGB led
+ ledg = 0;
+ ledb = 0;
+ lcd.cls(); //keuze menu weergeven en clear LCD
+ lcd.locate(0,0); //Plaats LCD cursor op de juiste plaats
+ lcd.printf("******Menu******");
+ lcd.locate(0,1);
+ lcd.printf("1: Helderheid");
+ wait(1);
+ lcd.cls(); //clear LCD
+ lcd.locate(0,0);
+ lcd.printf("******Menu******");
+ lcd.locate(0,1);
+ lcd.printf("4: Terug");
+ wait(1);
+ }
+ if(push1 == 1){ //als drukknop 1 word ingedrukt
+ lcd.cls(); //Drukknop info weergeven en clear LCD
+ lcd.locate(0,0);
+ lcd.printf("Menu: Helderheid");
+ lcd.locate(0,1);
+ lcd.printf("<+ -> bev. anu.");
+ wait(0.5);
+ vorig_licht = licht; //vergrendel de vorige waarde van licht indien er word geanuleerd
+ while(push3 == 0 && push4 == 0){ //while drukknoppen 3 en 4 niet ingedrukt zijn
+ LCDBack = licht; //geef de backlight de waarde van licht
+ if(push1 == 1){ //Als drukknop 1 word ingedrukt
+ licht = licht - 0.05; //Licht doen afnemen
+ ledr = 1; //aansturen led voor indicatie afname
+ ledg = 1;
+ ledb = 0;
+ if(licht <= 0){ //Als licht kleiner of gelijk aan 0 is word de waarde automatisch
+ licht = 0; //terug 0, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
+ }
+ wait(0.2);
+ }
+ if(push2 == 1){ //Als drukknop 2 word ingedrukt
+ licht = licht + 0.05; //Licht doen toenemen
+ ledr = 0; //aansturen led voor indicatie toename
+ ledg = 1;
+ ledb = 1;
+ if(licht >= 1){ //Als licht groter of gelijk aan 1 is word de waarde automatisch
+ licht = 1; //terug 1, dit zorgt er voor dat de waarde steeds tussen 0 en 1 blijft.
+ }
+ wait(0.2);
+ }
+ wait(0.5);
+ }
+ if(push4 == 1){ //Als drukknop 4 ingedrukt word (Anulatie)
+ licht = vorig_licht; //licht krijgt de vorige waarde terug
+ }
+ }
+ }
+ if(push3 == 1){ //Als drukknop 3 ingedrukt word (Bevestiging)
+ lcd.cls(); //indicatie bevestiging op LCD en clear LCD
+ lcd.locate(0,0);
+ lcd.printf("Invoer");
+ lcd.locate(0,1);
+ lcd.printf("bevestigd");
+ wait(2);
+ }
+ push1.rise(NULL); //Verwijder interupt flags
+ push2.rise(NULL);
+ push3.rise(NULL);
+ push4.rise(NULL);
+ LCDBack = licht; //Backlight aansturen
+ lcd.cls(); //indicatie voor verlaten van menu en clear LCD
+ lcd.locate(0,0);
+ lcd.printf("Terug naar");
+ lcd.locate(0,1);
+ lcd.printf("programma");
+ wait(2);
+
+}
+
+void instelling(){
+ wait(2);
+ lcd.cls(); //clear LCD
+ lcd.printf("instelling %1.1f", ingesteld); //plaats ingestelde waarde op LCD
+ vorige_instelling = ingesteld; //vergrendel de vorige waarde van ingesteld indien er word geanuleerd
+ while(push3 == 0 && push4 == 0){ //while drukknoppen 3 en 4 niet ingedrukt zijn
+ ledr = 0; //aansturen led
+ ledg = 0;
+ ledb = 0;
+ lcd.locate(0,1); //bepaal cursor locatie LCD
+ lcd.printf("naar --> %1.1f", ingesteld); //plaats de nieuwe waarde op het LCD
+ if(push1 == 1){ //Als drukknop 1 ingedrukt word
+ ingesteld = ingesteld + 0.5; //ingestelde waarde laten toenemen
+ ledr = 1; //aansturen led voor indicatie toename
+ ledg = 0;
+ ledb = 0;
+ wait(0.5);
+ }
+ if(push2 == 1){ //Als drukknop 2 ingedrukt word
+ ingesteld = ingesteld - 0.5; //ingestelde waarde laten afnemen
+ ledr = 0; //aansturen led voor indicatie afname
+ ledg = 0;
+ ledb = 1;
+ wait(0.5);
+ }
+ wait(0.5);
+ }
+ if(push4 == 1){ //Als drukknop 4 ingedrukt word (Anulatie)
+ ingesteld = vorige_instelling; //de ingestelde waarde verkrijgt de vorige waarde terug
+ }
+ push1.rise(NULL); //Verwijder interupt flags
+ push2.rise(NULL);
+ push3.rise(NULL);
+ push4.rise(NULL);
+ lcd.cls(); //indicatie voor verlaten van menu en clear LCD
+ lcd.locate(0,0);
+ lcd.printf("Terug naar");
+ lcd.locate(0,1);
+ lcd.printf("programma");
+ wait(2);
+}
+
+int main(){
+ int junk = 0; //RTC Klok
+
+ myservo = (5 * 0.000511 + 0.026); //Motor op 90 graden zetten, dit is de begin toestand.
+ lcd.cls(); //clear LCD
+ lcd.printf("Welkom"); //Welkom scherm
+ lcd.locate(0,1);
+ lcd.printf("Opstarten ...");
+ wait(3);
+ while(1){
+ push1.rise(&instelling); //drukknooppen 1 tot en met 3 onder interrupt
+ push2.rise(&instelling);
+ push3.rise(&menu);
+
+ test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year)); //uitlezen waarde RTC
+
+ junk = 0x39; // just a junk value do read and write test to DS1307 ram
+ test_rw(my1307.write( 0x20, junk)); // this should write the value of junk to register 0x20 (a ram location) in the ds1307.
+ junk = 0; // clear junk to show that when the register is read from the correct value is obtained
+ test_rw(my1307.read( 0x20, &junk)); // this should read register 0x20
+
+ LCDBack = licht; //Backlight aansturen
+ lcd.cls(); //clear LCD
+ lcd.locate(0,0);
+ lcd.printf("%d/%d/%d %d:%d",date,month,year,hours,min); //print de datum en de tijd
+ lcd.locate(0,1);
+ lcd.printf("<+ -> menu");
+ wait(5);
+ i=0; //maak de float i 0. (nodig voor de temperatuursmeting)
+ for(int t=0; t<100; t++) i=i+temp01.read(); //en meten van temperatuur binnen
+ j=0; //maak de float j 0. (nodig voor de temperatuursmeting)
+ for(int u=0; u<100; u++) j=j+temp02.read(); //en meten van temperatuur buiten
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("Binnen: %4.1fC ", i*3.3); //print de temperatuurswaarde op de LCD
+ lcd.locate(0,1);
+ lcd.printf("Buiten: %4.1fC ", j*3.3);
+ wait(5);
+ if(i*3.3 < ingesteld){ //Als de temperatuur kleiner is dan de ingestelde waarde
+ ledr = 0; //aansturen RGB led
+ ledg = 1;
+ ledb = 0;
+ relais = 1; //Relais hoog maken
+ //myservo = 0;
+ lcd.cls(); //clear LCD
+ lcd.locate(0,0);
+ lcd.printf("ingesteld: %1.1f", ingesteld); //print de ingestelde waarde op het LCD
+ lcd.locate(0,1);
+ lcd.printf("Verwarming: aan"); //print de status van de verwarming op het LCD
+
+ myservo = (170 * 0.000511 + 0.026); //Motor op 0 graden zetten, dit is de begin toestand.
+ wait(2);
+
+ }
+ if(i*3.3 >= ingesteld){ //Als de temperatuur grotere of gelijk is aan de ingestelde waarde
+ ledr = 1; //aansturen RGB led
+ ledg = 0;
+ ledb = 0;
+ relais = 0; //Relais laag maken
+ //myservo = 1;
+ lcd.cls(); //clear LCD
+ lcd.locate(0,0);
+ lcd.printf("ingesteld: %1.1f", ingesteld); //print de ingestelde waarde op het LCD
+ lcd.locate(0,1);
+ lcd.printf("Verwarming: uit"); //print de status van de verwarming op het LCD
+
+ myservo = (5 * 0.000511 + 0.026); //Motor op 0 graden zetten, dit is de begin toestand.
+ wait(2);
+
+ }
+ wait(3);
+ }
+}
\ No newline at end of file