alarmclock with 2 alarm times, 128x64 LCD with KS0108, displays time / time&date / a menu to change time & alarms, rotary encoder with push button, relay which switsches on a hi-fi system or something else, a 1F- Cap as a backup supply
Alarmclock
features:
- alarmclock with 2 alarm times
- 128x64 LCD with KS0108
- displays time / time&date / a menu to change time & alarms
- sleeptimer, relay is switched of when timer runs out
- rotary encoder with push button
- relay which switsches on a hi-fi system or something else
- a 1F- Cap as a backup supply
todo/ desired improvements/ known issues:
- a more precise real time clock would be nice
- a speaker or beeper directly connected to the mbed
- there is a bug where the big font is not displayed correctly
Schematic:
/media/uploads/gaebu/alarmclock_mbed_128x64.pdf
Diff: main.cpp
- Revision:
- 1:8a7f4f79f84d
- Parent:
- 0:62a6f55722d9
- Child:
- 2:fbf734bc04de
diff -r 62a6f55722d9 -r 8a7f4f79f84d main.cpp --- a/main.cpp Tue Jan 21 12:35:29 2014 +0000 +++ b/main.cpp Tue Aug 26 21:32:24 2014 +0000 @@ -20,12 +20,14 @@ // - alarmclock with 2 alarm times // - 128x64 LCD with KS0108 // - displays time / time&date / a menu to change time & alarms +// - sleeptimer, relay is switched of when timer runs out // - rottary encoder with push button // - relay which switsches on a hi-fi system or something else // - a 1F- Cap as a backup supply +// - the relay is manualy switched on/off by pressing the button +// longer than 2s //---------------------------------------------------------------- // todo/ desired improvements: -// - the sleeptimer isn't integrated already // - a real time clock would be nice // - a speaker or beeper directly connected to the mbed //---------------------------------------------------------------- @@ -49,7 +51,7 @@ // _RST,_DI, _RW, _E, _CS2, _CS1,DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7) KS0108 display(p13, p12, p14, p11, p30, p29, p21, p22, p23, p24, p25, p26, p27, p28); -QEI wheel (p17, p16, NC, 18); +QEI wheel (p17, p16, NC, 18, QEI::X2_ENCODING); DigitalIn wheelpush(p18); DigitalOut led1(LED1), led2(LED2), relay(p15), enbackligth(p19); @@ -60,7 +62,8 @@ menuDisp=1; alarmon=0; alarmset2=0; - sleeptimer=30; + sleeptimer=0; + wheelpushchanged=1; alarm.tm_sec = 00; // 0-59 alarm.tm_min = 00; // 0-59 @@ -81,21 +84,7 @@ display.PrintString("by_gaebu!"); wait(2); clearmenu(); - - /* - //print all chars - display.ClearScreen(); - int x=0,y=0; - for (int i=0x20;i<0xff;i++){ - display.Putchar(y,x,i); - x=x+8; - if (x>120){ - x=0; - y++; - } - } - while(1){} - */ + wheel.reset(); //mainloop //--------------------------------------------------------------- while (1) { @@ -140,16 +129,12 @@ newtime = localtime(&seconds); if(alarm.tm_min==newtime->tm_min & alarm.tm_hour==newtime->tm_hour & alarm.tm_sec==newtime->tm_sec) { alarmon=1; - //menuold=menu; - //blstateold=blstate; } } if(alarmset2 & !alarmon2) { newtime = localtime(&seconds); if(alarm2.tm_min==newtime->tm_min & alarm2.tm_hour==newtime->tm_hour & alarm2.tm_sec==newtime->tm_sec) { alarmon2=1; - //menuold=menu; - //blstateold=blstate; } } @@ -242,7 +227,10 @@ //--- Menu 8 --- sleep timer case 7: if (wheelpushed) { - setsleeptimer(); + if (sleeptimer>0) //if sleeptimer already set then reset + sleeptimer=0; + else + setsleeptimer(); } printmenu(7); break; @@ -297,6 +285,11 @@ display.PutString(6,20,"set Time/ Date"); //zeile7 display.PutString(7,20,"sleep timer"); +// if (sleeptimerstart) { + if (sleeptimer>0) { + display.PrintInteger(sleeptimer,7,85); +// display.PutString(7,40,sleeptime_set); + } //select line for (i=2;i<8;i++) display.PutString(i,2," "); @@ -306,6 +299,7 @@ } //------------------------------------------ void setsleeptimer(){ + sleeptimer=30; clearmenu(); wheel.reset(); change_sleeptimer=true; @@ -324,7 +318,7 @@ checkbutton(); if (wheel.getPulses()>1){ - if (sleeptimer<10080) + if (sleeptimer<1080) sleeptimer+=5; } else if (wheel.getPulses()<1){ @@ -338,10 +332,23 @@ change_sleeptimer=false; wheelpushed=false; wheel.reset(); + //sleeptimerstart=true; + ticker.attach(&ticker_tick, 60); + relay=1; } } } //------------------------------------------ +void ticker_tick() //called every 60s when sleeptimer set +{ + sleeptimer--; + if (sleeptimer==0){ + relay=0; + blstate=0; + ticker.detach(); + } +} +//------------------------------------------ void setalarm(char alnb) { clearmenu(); @@ -561,15 +568,21 @@ { wheelpushed=false; wheelpushedlong=false; + if (!wheelpush) { - temp=0; - while(!wheelpush) { - wait(0.01); - temp++; - } - if (temp>150) - wheelpushedlong=true; - else - wheelpushed=true; + if (wheelpushchanged) { + temp=0; + while(!wheelpush & temp<=200) { //if pressed longer than 2s.. + wait(0.01); + temp++; + } + if (temp>200) + wheelpushedlong=true; + else + wheelpushed=true; + wheelpushchanged=0; + } } + else + wheelpushchanged=1; } \ No newline at end of file