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

Dependencies:   KS0108 QEI mbed

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

Committer:
gaebu
Date:
Tue Jan 21 12:35:29 2014 +0000
Revision:
0:62a6f55722d9
Child:
1:8a7f4f79f84d
first version, see description

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gaebu 0:62a6f55722d9 1 /*
gaebu 0:62a6f55722d9 2 * @author gaebu
gaebu 0:62a6f55722d9 3 *
gaebu 0:62a6f55722d9 4 * @section LICENSE
gaebu 0:62a6f55722d9 5 *
gaebu 0:62a6f55722d9 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
gaebu 0:62a6f55722d9 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
gaebu 0:62a6f55722d9 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
gaebu 0:62a6f55722d9 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
gaebu 0:62a6f55722d9 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gaebu 0:62a6f55722d9 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
gaebu 0:62a6f55722d9 12 * THE SOFTWARE.
gaebu 0:62a6f55722d9 13 *
gaebu 0:62a6f55722d9 14 * @section DESCRIPTION
gaebu 0:62a6f55722d9 15
gaebu 0:62a6f55722d9 16 //----------------------------------------------------------------
gaebu 0:62a6f55722d9 17 // Alarmclock
gaebu 0:62a6f55722d9 18 // -----------
gaebu 0:62a6f55722d9 19 // features:
gaebu 0:62a6f55722d9 20 // - alarmclock with 2 alarm times
gaebu 0:62a6f55722d9 21 // - 128x64 LCD with KS0108
gaebu 0:62a6f55722d9 22 // - displays time / time&date / a menu to change time & alarms
gaebu 0:62a6f55722d9 23 // - rottary encoder with push button
gaebu 0:62a6f55722d9 24 // - relay which switsches on a hi-fi system or something else
gaebu 0:62a6f55722d9 25 // - a 1F- Cap as a backup supply
gaebu 0:62a6f55722d9 26 //----------------------------------------------------------------
gaebu 0:62a6f55722d9 27 // todo/ desired improvements:
gaebu 0:62a6f55722d9 28 // - the sleeptimer isn't integrated already
gaebu 0:62a6f55722d9 29 // - a real time clock would be nice
gaebu 0:62a6f55722d9 30 // - a speaker or beeper directly connected to the mbed
gaebu 0:62a6f55722d9 31 //----------------------------------------------------------------
gaebu 0:62a6f55722d9 32 */
gaebu 0:62a6f55722d9 33
gaebu 0:62a6f55722d9 34 #include "mbed.h"
gaebu 0:62a6f55722d9 35 #include "KS0108.h"
gaebu 0:62a6f55722d9 36 #include "QEI.h"
gaebu 0:62a6f55722d9 37 //#include "math.h"
gaebu 0:62a6f55722d9 38 //#include "Arial12.h"
gaebu 0:62a6f55722d9 39 //#include "Arial14.h"
gaebu 0:62a6f55722d9 40 //#include "arial_bold_14.h"
gaebu 0:62a6f55722d9 41 #include "Comic24.h"
gaebu 0:62a6f55722d9 42 //#include "SystemFont5x7.h"
gaebu 0:62a6f55722d9 43 //#include "vivaldi16.h"
gaebu 0:62a6f55722d9 44 //#include "MyPhone_20.h"
gaebu 0:62a6f55722d9 45 #include "MyPhone_40.h"
gaebu 0:62a6f55722d9 46 #include "alarmclock.h"
gaebu 0:62a6f55722d9 47 //#include <string>
gaebu 0:62a6f55722d9 48
gaebu 0:62a6f55722d9 49 // _RST,_DI, _RW, _E, _CS2, _CS1,DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7)
gaebu 0:62a6f55722d9 50 KS0108 display(p13, p12, p14, p11, p30, p29, p21, p22, p23, p24, p25, p26, p27, p28);
gaebu 0:62a6f55722d9 51
gaebu 0:62a6f55722d9 52 QEI wheel (p17, p16, NC, 18);
gaebu 0:62a6f55722d9 53 DigitalIn wheelpush(p18);
gaebu 0:62a6f55722d9 54 DigitalOut led1(LED1), led2(LED2), relay(p15), enbackligth(p19);
gaebu 0:62a6f55722d9 55
gaebu 0:62a6f55722d9 56 int main()
gaebu 0:62a6f55722d9 57 {
gaebu 0:62a6f55722d9 58 //general init
gaebu 0:62a6f55722d9 59 menu=1;
gaebu 0:62a6f55722d9 60 menuDisp=1;
gaebu 0:62a6f55722d9 61 alarmon=0;
gaebu 0:62a6f55722d9 62 alarmset2=0;
gaebu 0:62a6f55722d9 63 sleeptimer=30;
gaebu 0:62a6f55722d9 64
gaebu 0:62a6f55722d9 65 alarm.tm_sec = 00; // 0-59
gaebu 0:62a6f55722d9 66 alarm.tm_min = 00; // 0-59
gaebu 0:62a6f55722d9 67 alarm.tm_hour = 6; // 0-23
gaebu 0:62a6f55722d9 68 alarm2.tm_sec = 00; // 0-59
gaebu 0:62a6f55722d9 69 alarm2.tm_min = 00; // 0-59
gaebu 0:62a6f55722d9 70 alarm2.tm_hour = 5; // 0-23
gaebu 0:62a6f55722d9 71
gaebu 0:62a6f55722d9 72 //display title & frame
gaebu 0:62a6f55722d9 73 display.ClearScreen();
gaebu 0:62a6f55722d9 74 display.PutString(0,30,"alarmclock");
gaebu 0:62a6f55722d9 75 display.EmptyRectangle(0,0,127,63,BLACK);
gaebu 0:62a6f55722d9 76 display.HLine(0,127,7,BLACK);
gaebu 0:62a6f55722d9 77
gaebu 0:62a6f55722d9 78
gaebu 0:62a6f55722d9 79 display.GotoXY(10,16);
gaebu 0:62a6f55722d9 80 display.SelectFont(Comic24,BLACK,ReadData);
gaebu 0:62a6f55722d9 81 display.PrintString("by_gaebu!");
gaebu 0:62a6f55722d9 82 wait(2);
gaebu 0:62a6f55722d9 83 clearmenu();
gaebu 0:62a6f55722d9 84
gaebu 0:62a6f55722d9 85 /*
gaebu 0:62a6f55722d9 86 //print all chars
gaebu 0:62a6f55722d9 87 display.ClearScreen();
gaebu 0:62a6f55722d9 88 int x=0,y=0;
gaebu 0:62a6f55722d9 89 for (int i=0x20;i<0xff;i++){
gaebu 0:62a6f55722d9 90 display.Putchar(y,x,i);
gaebu 0:62a6f55722d9 91 x=x+8;
gaebu 0:62a6f55722d9 92 if (x>120){
gaebu 0:62a6f55722d9 93 x=0;
gaebu 0:62a6f55722d9 94 y++;
gaebu 0:62a6f55722d9 95 }
gaebu 0:62a6f55722d9 96 }
gaebu 0:62a6f55722d9 97 while(1){}
gaebu 0:62a6f55722d9 98 */
gaebu 0:62a6f55722d9 99 //mainloop
gaebu 0:62a6f55722d9 100 //---------------------------------------------------------------
gaebu 0:62a6f55722d9 101 while (1) {
gaebu 0:62a6f55722d9 102 //read time
gaebu 0:62a6f55722d9 103 seconds = time(NULL);
gaebu 0:62a6f55722d9 104
gaebu 0:62a6f55722d9 105 led1=relay;
gaebu 0:62a6f55722d9 106
gaebu 0:62a6f55722d9 107 //ckeck if button pressed or wheel turned
gaebu 0:62a6f55722d9 108 checkbutton();
gaebu 0:62a6f55722d9 109 //menu=wheel.getPulses();
gaebu 0:62a6f55722d9 110 if (wheel.getPulses()>1){
gaebu 0:62a6f55722d9 111 wheel.reset();
gaebu 0:62a6f55722d9 112 menu++;
gaebu 0:62a6f55722d9 113 if (menu>7)
gaebu 0:62a6f55722d9 114 menu=0;
gaebu 0:62a6f55722d9 115 }
gaebu 0:62a6f55722d9 116 if (wheel.getPulses()<1){
gaebu 0:62a6f55722d9 117 wheel.reset();
gaebu 0:62a6f55722d9 118 if (menu==0)
gaebu 0:62a6f55722d9 119 menu=7;
gaebu 0:62a6f55722d9 120 else
gaebu 0:62a6f55722d9 121 menu--;
gaebu 0:62a6f55722d9 122 }
gaebu 0:62a6f55722d9 123 display.PrintInteger(menu,0,100);
gaebu 0:62a6f55722d9 124
gaebu 0:62a6f55722d9 125 //ring the alarm?
gaebu 0:62a6f55722d9 126 if(alarmon | alarmon2) {
gaebu 0:62a6f55722d9 127 relay=1;
gaebu 0:62a6f55722d9 128 //blstate=!blstate;
gaebu 0:62a6f55722d9 129 backlight(1);//blstate);
gaebu 0:62a6f55722d9 130 if(menuold!=menu) { //ring until any button pressed
gaebu 0:62a6f55722d9 131 alarmon=0;
gaebu 0:62a6f55722d9 132 alarmon2=0;
gaebu 0:62a6f55722d9 133 relay=0;
gaebu 0:62a6f55722d9 134 backlight(blstate);//old);
gaebu 0:62a6f55722d9 135 }
gaebu 0:62a6f55722d9 136 }
gaebu 0:62a6f55722d9 137
gaebu 0:62a6f55722d9 138 //check alarm
gaebu 0:62a6f55722d9 139 if(alarmset & !alarmon) {
gaebu 0:62a6f55722d9 140 newtime = localtime(&seconds);
gaebu 0:62a6f55722d9 141 if(alarm.tm_min==newtime->tm_min & alarm.tm_hour==newtime->tm_hour & alarm.tm_sec==newtime->tm_sec) {
gaebu 0:62a6f55722d9 142 alarmon=1;
gaebu 0:62a6f55722d9 143 //menuold=menu;
gaebu 0:62a6f55722d9 144 //blstateold=blstate;
gaebu 0:62a6f55722d9 145 }
gaebu 0:62a6f55722d9 146 }
gaebu 0:62a6f55722d9 147 if(alarmset2 & !alarmon2) {
gaebu 0:62a6f55722d9 148 newtime = localtime(&seconds);
gaebu 0:62a6f55722d9 149 if(alarm2.tm_min==newtime->tm_min & alarm2.tm_hour==newtime->tm_hour & alarm2.tm_sec==newtime->tm_sec) {
gaebu 0:62a6f55722d9 150 alarmon2=1;
gaebu 0:62a6f55722d9 151 //menuold=menu;
gaebu 0:62a6f55722d9 152 //blstateold=blstate;
gaebu 0:62a6f55722d9 153 }
gaebu 0:62a6f55722d9 154 }
gaebu 0:62a6f55722d9 155
gaebu 0:62a6f55722d9 156 //display menu
gaebu 0:62a6f55722d9 157 //---------------------------------------------------------------
gaebu 0:62a6f55722d9 158 if (menu!=menuold) {
gaebu 0:62a6f55722d9 159 menuDisp=menu;
gaebu 0:62a6f55722d9 160 if (menu<2 | (menu==2&menuold==1) | (menu==7&menuold==0)){
gaebu 0:62a6f55722d9 161 clearmenu();
gaebu 0:62a6f55722d9 162 }
gaebu 0:62a6f55722d9 163 menuold=menu;
gaebu 0:62a6f55722d9 164 }
gaebu 0:62a6f55722d9 165 else if (menu>1 & !(wheelpushed|wheelpushedlong)) //don't redraw menu if no time is diplayed or no input made
gaebu 0:62a6f55722d9 166 menuDisp=99;
gaebu 0:62a6f55722d9 167 else
gaebu 0:62a6f55722d9 168 menuDisp=menu;
gaebu 0:62a6f55722d9 169
gaebu 0:62a6f55722d9 170 switch (menuDisp) {
gaebu 0:62a6f55722d9 171 //--- Menu 1 --- date&time
gaebu 0:62a6f55722d9 172 case 0:
gaebu 0:62a6f55722d9 173 strftime(x_day, 20, "%a, %d %b %Y\n", localtime(&seconds));
gaebu 0:62a6f55722d9 174 display.PutString(3,20,x_day);
gaebu 0:62a6f55722d9 175
gaebu 0:62a6f55722d9 176 strftime(x_time, 16, "%X\n", localtime(&seconds));
gaebu 0:62a6f55722d9 177 display.PutString(4,30,x_time);
gaebu 0:62a6f55722d9 178
gaebu 0:62a6f55722d9 179 if (wheelpushed) { //switch backlight if button pressed
gaebu 0:62a6f55722d9 180 blstate=!blstate;
gaebu 0:62a6f55722d9 181 backlight(blstate);
gaebu 0:62a6f55722d9 182 }
gaebu 0:62a6f55722d9 183 if (wheelpushedlong) { //switch relay if button pressed long
gaebu 0:62a6f55722d9 184 relay=!relay;
gaebu 0:62a6f55722d9 185 }
gaebu 0:62a6f55722d9 186 break;
gaebu 0:62a6f55722d9 187
gaebu 0:62a6f55722d9 188 //--- Menu 2 --- time big
gaebu 0:62a6f55722d9 189 case 1:
gaebu 0:62a6f55722d9 190 strftime(x_time, 16, "%H:%M", localtime(&seconds));
gaebu 0:62a6f55722d9 191 display.GotoXY(32,24);
gaebu 0:62a6f55722d9 192 //display.SelectFont(MyPhone_40,BLACK,ReadData);
gaebu 0:62a6f55722d9 193 display.SelectFont(Comic24,BLACK,ReadData);
gaebu 0:62a6f55722d9 194 display.PrintString(x_time);
gaebu 0:62a6f55722d9 195
gaebu 0:62a6f55722d9 196 if (wheelpushed) { //switch backlight if button pressed
gaebu 0:62a6f55722d9 197 blstate=!blstate;
gaebu 0:62a6f55722d9 198 backlight(blstate);
gaebu 0:62a6f55722d9 199 }
gaebu 0:62a6f55722d9 200 if (wheelpushedlong) { //switch relay if button pressed long
gaebu 0:62a6f55722d9 201 relay=!relay;
gaebu 0:62a6f55722d9 202 }
gaebu 0:62a6f55722d9 203 break;
gaebu 0:62a6f55722d9 204
gaebu 0:62a6f55722d9 205 //--- Menu 3 --- display menu, alarm1 on/off
gaebu 0:62a6f55722d9 206 case 2:
gaebu 0:62a6f55722d9 207 if (wheelpushed) {
gaebu 0:62a6f55722d9 208 alarmset=!alarmset;
gaebu 0:62a6f55722d9 209 }
gaebu 0:62a6f55722d9 210 printmenu(2);
gaebu 0:62a6f55722d9 211 break;
gaebu 0:62a6f55722d9 212 //--- Menu 4 --- display menu, alarm2 on/off
gaebu 0:62a6f55722d9 213 case 3:
gaebu 0:62a6f55722d9 214 if (wheelpushed) {
gaebu 0:62a6f55722d9 215 alarmset2=!alarmset2;
gaebu 0:62a6f55722d9 216 // readchar=0;
gaebu 0:62a6f55722d9 217 }
gaebu 0:62a6f55722d9 218 printmenu(3);
gaebu 0:62a6f55722d9 219 break;
gaebu 0:62a6f55722d9 220 //--- Menu 5 --- set alarm 1
gaebu 0:62a6f55722d9 221 case 4:
gaebu 0:62a6f55722d9 222 if (wheelpushed) {
gaebu 0:62a6f55722d9 223 setalarm(1);
gaebu 0:62a6f55722d9 224 }
gaebu 0:62a6f55722d9 225 printmenu(4);
gaebu 0:62a6f55722d9 226 break;
gaebu 0:62a6f55722d9 227 //--- Menu 6 --- set alarm 2
gaebu 0:62a6f55722d9 228 case 5:
gaebu 0:62a6f55722d9 229 if (wheelpushed) {
gaebu 0:62a6f55722d9 230 setalarm(2);
gaebu 0:62a6f55722d9 231 }
gaebu 0:62a6f55722d9 232 printmenu(5);
gaebu 0:62a6f55722d9 233 break;
gaebu 0:62a6f55722d9 234 //--- Menu 7 --- set time&date
gaebu 0:62a6f55722d9 235 case 6:
gaebu 0:62a6f55722d9 236 if (wheelpushed) {
gaebu 0:62a6f55722d9 237 settimedate();
gaebu 0:62a6f55722d9 238 }
gaebu 0:62a6f55722d9 239 printmenu(6);
gaebu 0:62a6f55722d9 240 break;
gaebu 0:62a6f55722d9 241
gaebu 0:62a6f55722d9 242 //--- Menu 8 --- sleep timer
gaebu 0:62a6f55722d9 243 case 7:
gaebu 0:62a6f55722d9 244 if (wheelpushed) {
gaebu 0:62a6f55722d9 245 setsleeptimer();
gaebu 0:62a6f55722d9 246 }
gaebu 0:62a6f55722d9 247 printmenu(7);
gaebu 0:62a6f55722d9 248 break;
gaebu 0:62a6f55722d9 249 case 99:
gaebu 0:62a6f55722d9 250 //do nothing
gaebu 0:62a6f55722d9 251 break;
gaebu 0:62a6f55722d9 252 default:
gaebu 0:62a6f55722d9 253 display.PutString(0,100,"error");
gaebu 0:62a6f55722d9 254 exit(1);
gaebu 0:62a6f55722d9 255 }
gaebu 0:62a6f55722d9 256 }
gaebu 0:62a6f55722d9 257 }
gaebu 0:62a6f55722d9 258 //functions
gaebu 0:62a6f55722d9 259 //------------------------------------------
gaebu 0:62a6f55722d9 260 void clearmenu()
gaebu 0:62a6f55722d9 261 {
gaebu 0:62a6f55722d9 262 //display.FullRectangle(1,9,126,62,WHITE);
gaebu 0:62a6f55722d9 263
gaebu 0:62a6f55722d9 264 //display title & frame
gaebu 0:62a6f55722d9 265 display.ClearScreen();
gaebu 0:62a6f55722d9 266 display.PutString(0,30,"alarmclock");
gaebu 0:62a6f55722d9 267 display.EmptyRectangle(0,0,127,63,BLACK);
gaebu 0:62a6f55722d9 268 display.HLine(0,127,7,BLACK);
gaebu 0:62a6f55722d9 269 }
gaebu 0:62a6f55722d9 270 //------------------------------------------
gaebu 0:62a6f55722d9 271 void printmenu(int selectedline)
gaebu 0:62a6f55722d9 272 {
gaebu 0:62a6f55722d9 273
gaebu 0:62a6f55722d9 274 //zeile1
gaebu 0:62a6f55722d9 275
gaebu 0:62a6f55722d9 276 //zeile2
gaebu 0:62a6f55722d9 277 display.PutString(2,20,"Alarm 1:");
gaebu 0:62a6f55722d9 278 if (alarmset)
gaebu 0:62a6f55722d9 279 display.PutString(2,80,"on ");
gaebu 0:62a6f55722d9 280 else
gaebu 0:62a6f55722d9 281 display.PutString(2,80,"off ");
gaebu 0:62a6f55722d9 282 //zeile3
gaebu 0:62a6f55722d9 283 display.PutString(3,20,"Alarm 2:");
gaebu 0:62a6f55722d9 284 if (alarmset2)
gaebu 0:62a6f55722d9 285 display.PutString(3,80,"on ");
gaebu 0:62a6f55722d9 286 else
gaebu 0:62a6f55722d9 287 display.PutString(3,80,"off ");
gaebu 0:62a6f55722d9 288 //zeile4
gaebu 0:62a6f55722d9 289 display.PutString(4,20,"set Alarm 1");
gaebu 0:62a6f55722d9 290 strftime(alarmtime, 6, "%H:%M\n", &alarm);
gaebu 0:62a6f55722d9 291 display.PutString(4,85,alarmtime);
gaebu 0:62a6f55722d9 292 //zeile5
gaebu 0:62a6f55722d9 293 display.PutString(5,20,"set Alarm 2");
gaebu 0:62a6f55722d9 294 strftime(alarmtime, 6, "%H:%M\n", &alarm2);
gaebu 0:62a6f55722d9 295 display.PutString(5,85,alarmtime);
gaebu 0:62a6f55722d9 296 //zeile6
gaebu 0:62a6f55722d9 297 display.PutString(6,20,"set Time/ Date");
gaebu 0:62a6f55722d9 298 //zeile7
gaebu 0:62a6f55722d9 299 display.PutString(7,20,"sleep timer");
gaebu 0:62a6f55722d9 300 //select line
gaebu 0:62a6f55722d9 301 for (i=2;i<8;i++)
gaebu 0:62a6f55722d9 302 display.PutString(i,2," ");
gaebu 0:62a6f55722d9 303 display.PutString(selectedline,2,"~~");
gaebu 0:62a6f55722d9 304 //frame
gaebu 0:62a6f55722d9 305 display.EmptyRectangle(0,0,127,63,BLACK);
gaebu 0:62a6f55722d9 306 }
gaebu 0:62a6f55722d9 307 //------------------------------------------
gaebu 0:62a6f55722d9 308 void setsleeptimer(){
gaebu 0:62a6f55722d9 309 clearmenu();
gaebu 0:62a6f55722d9 310 wheel.reset();
gaebu 0:62a6f55722d9 311 change_sleeptimer=true;
gaebu 0:62a6f55722d9 312 display.PutString(3,30,"set sleeptimer");
gaebu 0:62a6f55722d9 313 display.PutString(5,30,"min:");
gaebu 0:62a6f55722d9 314 while(change_sleeptimer){
gaebu 0:62a6f55722d9 315 if (sleeptimer<10)
gaebu 0:62a6f55722d9 316 display.PutString(5,65," ");
gaebu 0:62a6f55722d9 317 if (sleeptimer<100)
gaebu 0:62a6f55722d9 318 display.PutString(5,70," ");
gaebu 0:62a6f55722d9 319 if (sleeptimer<1000)
gaebu 0:62a6f55722d9 320 display.PutString(5,75," ");
gaebu 0:62a6f55722d9 321 if (sleeptimer<10000)
gaebu 0:62a6f55722d9 322 display.PutString(5,80," ");
gaebu 0:62a6f55722d9 323 display.PrintInteger(sleeptimer,5,60);
gaebu 0:62a6f55722d9 324
gaebu 0:62a6f55722d9 325 checkbutton();
gaebu 0:62a6f55722d9 326 if (wheel.getPulses()>1){
gaebu 0:62a6f55722d9 327 if (sleeptimer<10080)
gaebu 0:62a6f55722d9 328 sleeptimer+=5;
gaebu 0:62a6f55722d9 329 }
gaebu 0:62a6f55722d9 330 else if (wheel.getPulses()<1){
gaebu 0:62a6f55722d9 331 if (sleeptimer>5)
gaebu 0:62a6f55722d9 332 sleeptimer-=5;
gaebu 0:62a6f55722d9 333 }
gaebu 0:62a6f55722d9 334 if (wheel.getPulses()!=1)
gaebu 0:62a6f55722d9 335 wheel.reset();
gaebu 0:62a6f55722d9 336
gaebu 0:62a6f55722d9 337 if (wheelpushed) {
gaebu 0:62a6f55722d9 338 change_sleeptimer=false;
gaebu 0:62a6f55722d9 339 wheelpushed=false;
gaebu 0:62a6f55722d9 340 wheel.reset();
gaebu 0:62a6f55722d9 341 }
gaebu 0:62a6f55722d9 342 }
gaebu 0:62a6f55722d9 343 }
gaebu 0:62a6f55722d9 344 //------------------------------------------
gaebu 0:62a6f55722d9 345 void setalarm(char alnb)
gaebu 0:62a6f55722d9 346 {
gaebu 0:62a6f55722d9 347 clearmenu();
gaebu 0:62a6f55722d9 348 wheel.reset();
gaebu 0:62a6f55722d9 349 change_alarm_hour=1;
gaebu 0:62a6f55722d9 350 display.PutString(4,30,"-- ");
gaebu 0:62a6f55722d9 351 if (alnb == 1)
gaebu 0:62a6f55722d9 352 al_to_change=alarm;
gaebu 0:62a6f55722d9 353 else
gaebu 0:62a6f55722d9 354 al_to_change=alarm2;
gaebu 0:62a6f55722d9 355 while (change_alarm_hour) {
gaebu 0:62a6f55722d9 356 strftime(alarmtime, 6, "%H:%M\n", &al_to_change);
gaebu 0:62a6f55722d9 357 display.PutString(3,30,alarmtime);
gaebu 0:62a6f55722d9 358 checkbutton();
gaebu 0:62a6f55722d9 359 if (wheel.getPulses()>1)
gaebu 0:62a6f55722d9 360 wheelturned='r';
gaebu 0:62a6f55722d9 361 else if (wheel.getPulses()<1)
gaebu 0:62a6f55722d9 362 wheelturned='l';
gaebu 0:62a6f55722d9 363 if (wheel.getPulses()==1)
gaebu 0:62a6f55722d9 364 wheelturned=0;
gaebu 0:62a6f55722d9 365 else
gaebu 0:62a6f55722d9 366 wheel.reset();
gaebu 0:62a6f55722d9 367
gaebu 0:62a6f55722d9 368 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 369 al_to_change.tm_hour++;
gaebu 0:62a6f55722d9 370 if (al_to_change.tm_hour>23)
gaebu 0:62a6f55722d9 371 al_to_change.tm_hour=0;
gaebu 0:62a6f55722d9 372 }
gaebu 0:62a6f55722d9 373 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 374 al_to_change.tm_hour--;
gaebu 0:62a6f55722d9 375 if (al_to_change.tm_hour<0)
gaebu 0:62a6f55722d9 376 al_to_change.tm_hour=23;
gaebu 0:62a6f55722d9 377 }
gaebu 0:62a6f55722d9 378 if (wheelpushed) {
gaebu 0:62a6f55722d9 379 change_alarm_hour=0;
gaebu 0:62a6f55722d9 380 change_alarm_min=1;
gaebu 0:62a6f55722d9 381 display.PutString(4,30," --");
gaebu 0:62a6f55722d9 382 }
gaebu 0:62a6f55722d9 383 }
gaebu 0:62a6f55722d9 384 while (change_alarm_min) {
gaebu 0:62a6f55722d9 385 strftime(alarmtime, 6, "%H:%M\n", &al_to_change);
gaebu 0:62a6f55722d9 386 display.PutString(3,30,alarmtime);
gaebu 0:62a6f55722d9 387
gaebu 0:62a6f55722d9 388 checkbutton();
gaebu 0:62a6f55722d9 389 if (wheel.getPulses()>1)
gaebu 0:62a6f55722d9 390 wheelturned='r';
gaebu 0:62a6f55722d9 391 else if (wheel.getPulses()<1)
gaebu 0:62a6f55722d9 392 wheelturned='l';
gaebu 0:62a6f55722d9 393 if (wheel.getPulses()==1)
gaebu 0:62a6f55722d9 394 wheelturned=0;
gaebu 0:62a6f55722d9 395 else
gaebu 0:62a6f55722d9 396 wheel.reset();
gaebu 0:62a6f55722d9 397 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 398 al_to_change.tm_min++;
gaebu 0:62a6f55722d9 399 if (al_to_change.tm_min>59)
gaebu 0:62a6f55722d9 400 al_to_change.tm_min=0;
gaebu 0:62a6f55722d9 401 }
gaebu 0:62a6f55722d9 402 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 403 al_to_change.tm_min--;
gaebu 0:62a6f55722d9 404 if (al_to_change.tm_min<0)
gaebu 0:62a6f55722d9 405 al_to_change.tm_min=59;
gaebu 0:62a6f55722d9 406 }
gaebu 0:62a6f55722d9 407 if (wheelpushed) {
gaebu 0:62a6f55722d9 408 change_alarm_min=0;
gaebu 0:62a6f55722d9 409 if (alnb == 1)
gaebu 0:62a6f55722d9 410 alarm=al_to_change;
gaebu 0:62a6f55722d9 411 else
gaebu 0:62a6f55722d9 412 alarm2=al_to_change;
gaebu 0:62a6f55722d9 413 wheelturned=0;
gaebu 0:62a6f55722d9 414 wheelpushed=false;
gaebu 0:62a6f55722d9 415 wheel.reset();
gaebu 0:62a6f55722d9 416 }
gaebu 0:62a6f55722d9 417 }
gaebu 0:62a6f55722d9 418 }
gaebu 0:62a6f55722d9 419 //------------------------------------------
gaebu 0:62a6f55722d9 420 void settimedate()
gaebu 0:62a6f55722d9 421 {
gaebu 0:62a6f55722d9 422 clearmenu();
gaebu 0:62a6f55722d9 423 wheel.reset();
gaebu 0:62a6f55722d9 424 seconds = time(NULL);
gaebu 0:62a6f55722d9 425 newtime = localtime(&seconds);
gaebu 0:62a6f55722d9 426 set_td_menu=1;
gaebu 0:62a6f55722d9 427 wheelturned=1;
gaebu 0:62a6f55722d9 428 //menuold=0;
gaebu 0:62a6f55722d9 429 display.PutString(4,30,"-- ");
gaebu 0:62a6f55722d9 430 if (newtime->tm_year==70)
gaebu 0:62a6f55722d9 431 newtime->tm_year=113;
gaebu 0:62a6f55722d9 432
gaebu 0:62a6f55722d9 433 while(set_td_menu>0) {
gaebu 0:62a6f55722d9 434 if(wheelturned>0) { //update display if changed
gaebu 0:62a6f55722d9 435 strftime(x_day, 20, "%d.%m.%Y\n", newtime);
gaebu 0:62a6f55722d9 436 display.PutString(5,30,x_day);
gaebu 0:62a6f55722d9 437
gaebu 0:62a6f55722d9 438 char x_time[16];
gaebu 0:62a6f55722d9 439 strftime(x_time, 16, "%H:%M\n", newtime);
gaebu 0:62a6f55722d9 440 display.PutString(3,30,x_time);
gaebu 0:62a6f55722d9 441 }
gaebu 0:62a6f55722d9 442 checkbutton();
gaebu 0:62a6f55722d9 443 //menu=wheel.getPulses();
gaebu 0:62a6f55722d9 444 //display.PrintInteger(menu,0,100);
gaebu 0:62a6f55722d9 445 //if (menu>menuold)
gaebu 0:62a6f55722d9 446 if (wheel.getPulses()>1)
gaebu 0:62a6f55722d9 447 wheelturned='r';
gaebu 0:62a6f55722d9 448 else if (wheel.getPulses()<1)
gaebu 0:62a6f55722d9 449 wheelturned='l';
gaebu 0:62a6f55722d9 450 if (wheel.getPulses()==1)
gaebu 0:62a6f55722d9 451 wheelturned=0;
gaebu 0:62a6f55722d9 452 else
gaebu 0:62a6f55722d9 453 wheel.reset();
gaebu 0:62a6f55722d9 454 //menuold=menu;
gaebu 0:62a6f55722d9 455
gaebu 0:62a6f55722d9 456 switch(set_td_menu) {
gaebu 0:62a6f55722d9 457 case 0:
gaebu 0:62a6f55722d9 458 break; // Invalid entry
gaebu 0:62a6f55722d9 459 case 1: //set hour
gaebu 0:62a6f55722d9 460 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 461 newtime->tm_hour++;
gaebu 0:62a6f55722d9 462 if (newtime->tm_hour>23)
gaebu 0:62a6f55722d9 463 newtime->tm_hour=0;
gaebu 0:62a6f55722d9 464 }
gaebu 0:62a6f55722d9 465 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 466 newtime->tm_hour--;
gaebu 0:62a6f55722d9 467 if (newtime->tm_hour<0)
gaebu 0:62a6f55722d9 468 newtime->tm_hour=23;
gaebu 0:62a6f55722d9 469 }
gaebu 0:62a6f55722d9 470 if (wheelpushed) {
gaebu 0:62a6f55722d9 471 set_td_menu++;
gaebu 0:62a6f55722d9 472 display.PutString(4,30," --");
gaebu 0:62a6f55722d9 473 }
gaebu 0:62a6f55722d9 474 break;
gaebu 0:62a6f55722d9 475 case 2: //set min
gaebu 0:62a6f55722d9 476 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 477 newtime->tm_min++;
gaebu 0:62a6f55722d9 478 if (newtime->tm_min>59)
gaebu 0:62a6f55722d9 479 newtime->tm_min=0;
gaebu 0:62a6f55722d9 480 }
gaebu 0:62a6f55722d9 481 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 482 newtime->tm_min--;
gaebu 0:62a6f55722d9 483 if (newtime->tm_min<0)
gaebu 0:62a6f55722d9 484 newtime->tm_min=59;
gaebu 0:62a6f55722d9 485 }
gaebu 0:62a6f55722d9 486 if (wheelpushed) {
gaebu 0:62a6f55722d9 487 set_td_menu++;
gaebu 0:62a6f55722d9 488 display.PutString(4,30," ");
gaebu 0:62a6f55722d9 489 display.PutString(6,30,"-- ");
gaebu 0:62a6f55722d9 490 }
gaebu 0:62a6f55722d9 491 break;
gaebu 0:62a6f55722d9 492 case 3: //set day
gaebu 0:62a6f55722d9 493 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 494 newtime->tm_mday++;
gaebu 0:62a6f55722d9 495 if (newtime->tm_mday>31)
gaebu 0:62a6f55722d9 496 newtime->tm_mday=1;
gaebu 0:62a6f55722d9 497 }
gaebu 0:62a6f55722d9 498 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 499 newtime->tm_mday--;
gaebu 0:62a6f55722d9 500 if (newtime->tm_mday<1)
gaebu 0:62a6f55722d9 501 newtime->tm_mday=31;
gaebu 0:62a6f55722d9 502 }
gaebu 0:62a6f55722d9 503 if (wheelpushed) {
gaebu 0:62a6f55722d9 504 set_td_menu++;
gaebu 0:62a6f55722d9 505 display.PutString(6,30," -- ");
gaebu 0:62a6f55722d9 506 }
gaebu 0:62a6f55722d9 507 break;
gaebu 0:62a6f55722d9 508 case 4: //set month
gaebu 0:62a6f55722d9 509 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 510 newtime->tm_mon++;
gaebu 0:62a6f55722d9 511 if (newtime->tm_mon>11)
gaebu 0:62a6f55722d9 512 newtime->tm_mon=0;
gaebu 0:62a6f55722d9 513 }
gaebu 0:62a6f55722d9 514 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 515 newtime->tm_mon--;
gaebu 0:62a6f55722d9 516 if (newtime->tm_mon<0)
gaebu 0:62a6f55722d9 517 newtime->tm_mon=11;
gaebu 0:62a6f55722d9 518 }
gaebu 0:62a6f55722d9 519 if (wheelpushed) {
gaebu 0:62a6f55722d9 520 set_td_menu++;
gaebu 0:62a6f55722d9 521 display.PutString(6,30," ----");
gaebu 0:62a6f55722d9 522 }
gaebu 0:62a6f55722d9 523 break;
gaebu 0:62a6f55722d9 524 case 5: //set month
gaebu 0:62a6f55722d9 525 if (wheelturned=='r') {
gaebu 0:62a6f55722d9 526 newtime->tm_year++;
gaebu 0:62a6f55722d9 527 if (newtime->tm_year>200)
gaebu 0:62a6f55722d9 528 newtime->tm_year=100;
gaebu 0:62a6f55722d9 529 }
gaebu 0:62a6f55722d9 530 if (wheelturned=='l') {
gaebu 0:62a6f55722d9 531 newtime->tm_year--;
gaebu 0:62a6f55722d9 532 if (newtime->tm_year<100)
gaebu 0:62a6f55722d9 533 newtime->tm_year=200;
gaebu 0:62a6f55722d9 534 }
gaebu 0:62a6f55722d9 535 if (wheelpushed) {
gaebu 0:62a6f55722d9 536 set_td_menu=0;
gaebu 0:62a6f55722d9 537 display.PutString(6,30," ");
gaebu 0:62a6f55722d9 538 // convert to timestamp and set
gaebu 0:62a6f55722d9 539 set_time(mktime(newtime));
gaebu 0:62a6f55722d9 540 wheelturned=0;
gaebu 0:62a6f55722d9 541 wheelpushed=false;
gaebu 0:62a6f55722d9 542 //menuDisp=0;
gaebu 0:62a6f55722d9 543 //menuold=0;
gaebu 0:62a6f55722d9 544 wheel.reset();
gaebu 0:62a6f55722d9 545 }
gaebu 0:62a6f55722d9 546 break;
gaebu 0:62a6f55722d9 547 default:
gaebu 0:62a6f55722d9 548 display.PutString(0,100,"error");
gaebu 0:62a6f55722d9 549 exit(1);
gaebu 0:62a6f55722d9 550 }
gaebu 0:62a6f55722d9 551 }
gaebu 0:62a6f55722d9 552 }
gaebu 0:62a6f55722d9 553 //------------------------------------------
gaebu 0:62a6f55722d9 554 void backlight (bool onoff)
gaebu 0:62a6f55722d9 555 {
gaebu 0:62a6f55722d9 556 led2=onoff;
gaebu 0:62a6f55722d9 557 enbackligth=onoff;
gaebu 0:62a6f55722d9 558 }
gaebu 0:62a6f55722d9 559 //------------------------------------------
gaebu 0:62a6f55722d9 560 void checkbutton()
gaebu 0:62a6f55722d9 561 {
gaebu 0:62a6f55722d9 562 wheelpushed=false;
gaebu 0:62a6f55722d9 563 wheelpushedlong=false;
gaebu 0:62a6f55722d9 564 if (!wheelpush) {
gaebu 0:62a6f55722d9 565 temp=0;
gaebu 0:62a6f55722d9 566 while(!wheelpush) {
gaebu 0:62a6f55722d9 567 wait(0.01);
gaebu 0:62a6f55722d9 568 temp++;
gaebu 0:62a6f55722d9 569 }
gaebu 0:62a6f55722d9 570 if (temp>150)
gaebu 0:62a6f55722d9 571 wheelpushedlong=true;
gaebu 0:62a6f55722d9 572 else
gaebu 0:62a6f55722d9 573 wheelpushed=true;
gaebu 0:62a6f55722d9 574 }
gaebu 0:62a6f55722d9 575 }