This is the program that runs on the Mbell (https://sites.google.com/site/projectmbell)

Dependencies:   DS1307 LcdWindow TextLCD mbed

Committer:
tombracer
Date:
Thu Oct 25 16:19:55 2012 +0000
Revision:
0:870ce81eb888
First "finished" version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tombracer 0:870ce81eb888 1 #include "mbed.h"
tombracer 0:870ce81eb888 2 #include "hd44780_8bit.h"
tombracer 0:870ce81eb888 3 #include "ds1307.h"
tombracer 0:870ce81eb888 4
tombracer 0:870ce81eb888 5 Serial pc(USBTX, USBRX);
tombracer 0:870ce81eb888 6 Serial toWifly(p13, p14); // tx, rx
tombracer 0:870ce81eb888 7 DS1307 my1307(p28,p27); // start DS1307 class and give it pins for connections of the DS1307 device
tombracer 0:870ce81eb888 8 LocalFileSystem local("local"); // Create the local filesystem
tombracer 0:870ce81eb888 9
tombracer 0:870ce81eb888 10 int sec = 0;
tombracer 0:870ce81eb888 11 int min = 0;
tombracer 0:870ce81eb888 12 int hours = 0;
tombracer 0:870ce81eb888 13 int day = 1; //sunday
tombracer 0:870ce81eb888 14 int date = 1;
tombracer 0:870ce81eb888 15 int month = 1;
tombracer 0:870ce81eb888 16 int year = 12; //2012
tombracer 0:870ce81eb888 17
tombracer 0:870ce81eb888 18 DigitalOut led1(LED1);
tombracer 0:870ce81eb888 19 DigitalOut led2(LED2);
tombracer 0:870ce81eb888 20 DigitalOut led3(LED3);
tombracer 0:870ce81eb888 21 DigitalOut led4(LED4);
tombracer 0:870ce81eb888 22
tombracer 0:870ce81eb888 23 DigitalIn top(p20);
tombracer 0:870ce81eb888 24 DigitalIn aup(p18);
tombracer 0:870ce81eb888 25 DigitalIn bdw(p17);
tombracer 0:870ce81eb888 26 DigitalIn bot(p19);
tombracer 0:870ce81eb888 27
tombracer 0:870ce81eb888 28 InterruptIn dbtrig(p24);
tombracer 0:870ce81eb888 29 int trigState = 0;
tombracer 0:870ce81eb888 30
tombracer 0:870ce81eb888 31 //pushbuttons
tombracer 0:870ce81eb888 32 InterruptIn menuButton(p25);
tombracer 0:870ce81eb888 33 int menuState = 0;
tombracer 0:870ce81eb888 34
tombracer 0:870ce81eb888 35 DigitalIn menuUp(p26);
tombracer 0:870ce81eb888 36 DigitalIn menuDown(p29);
tombracer 0:870ce81eb888 37
tombracer 0:870ce81eb888 38 //motor control pins
tombracer 0:870ce81eb888 39 DigitalOut mena(p21);
tombracer 0:870ce81eb888 40 DigitalOut mdown(p22);
tombracer 0:870ce81eb888 41 DigitalOut mup(p23);
tombracer 0:870ce81eb888 42
tombracer 0:870ce81eb888 43 void test_rw(int test) {
tombracer 0:870ce81eb888 44 if (test == 0) pc.printf("Last R/W operaion passed!\n\r");
tombracer 0:870ce81eb888 45 else pc.printf("Last R/W operation failed!\n\r");
tombracer 0:870ce81eb888 46 }
tombracer 0:870ce81eb888 47
tombracer 0:870ce81eb888 48 void up(void){
tombracer 0:870ce81eb888 49 mup=1;
tombracer 0:870ce81eb888 50 mdown=0;
tombracer 0:870ce81eb888 51 }
tombracer 0:870ce81eb888 52
tombracer 0:870ce81eb888 53 void down(void) {
tombracer 0:870ce81eb888 54 mup=0;
tombracer 0:870ce81eb888 55 mdown=1;
tombracer 0:870ce81eb888 56 }
tombracer 0:870ce81eb888 57
tombracer 0:870ce81eb888 58 void stop(void) {
tombracer 0:870ce81eb888 59 mup=0;
tombracer 0:870ce81eb888 60 mdown=0;
tombracer 0:870ce81eb888 61 }
tombracer 0:870ce81eb888 62
tombracer 0:870ce81eb888 63 void gotoTop(void) {
tombracer 0:870ce81eb888 64 if(top) up();
tombracer 0:870ce81eb888 65 while(top) {
tombracer 0:870ce81eb888 66 led1=1;
tombracer 0:870ce81eb888 67 }
tombracer 0:870ce81eb888 68 stop();
tombracer 0:870ce81eb888 69 led1=0;
tombracer 0:870ce81eb888 70 }
tombracer 0:870ce81eb888 71
tombracer 0:870ce81eb888 72 void gotoAup(void) {
tombracer 0:870ce81eb888 73 if(aup) up();
tombracer 0:870ce81eb888 74 while(aup) {
tombracer 0:870ce81eb888 75 led2=1;
tombracer 0:870ce81eb888 76 }
tombracer 0:870ce81eb888 77 stop();
tombracer 0:870ce81eb888 78 led2=0;
tombracer 0:870ce81eb888 79 }
tombracer 0:870ce81eb888 80
tombracer 0:870ce81eb888 81 void gotoBot(void) {
tombracer 0:870ce81eb888 82 if(bot) down();
tombracer 0:870ce81eb888 83 while(bot) {
tombracer 0:870ce81eb888 84 led3=1;
tombracer 0:870ce81eb888 85 }
tombracer 0:870ce81eb888 86 stop();
tombracer 0:870ce81eb888 87
tombracer 0:870ce81eb888 88 //give the ball time to enter lift
tombracer 0:870ce81eb888 89 wait(0.5);
tombracer 0:870ce81eb888 90 led3=0;
tombracer 0:870ce81eb888 91 }
tombracer 0:870ce81eb888 92
tombracer 0:870ce81eb888 93 //doorbell trigger interrupt routine
tombracer 0:870ce81eb888 94 void doorbell() {
tombracer 0:870ce81eb888 95 //a little debouncing
tombracer 0:870ce81eb888 96 wait(0.01);
tombracer 0:870ce81eb888 97 if(dbtrig) trigState = 1;
tombracer 0:870ce81eb888 98 }//doorbell
tombracer 0:870ce81eb888 99
tombracer 0:870ce81eb888 100 //menu setup trigger interrupt routine
tombracer 0:870ce81eb888 101 void menuSetup() {
tombracer 0:870ce81eb888 102 wait(0.06);
tombracer 0:870ce81eb888 103 if(menuButton) menuState = 1;
tombracer 0:870ce81eb888 104 }//menuSetup
tombracer 0:870ce81eb888 105
tombracer 0:870ce81eb888 106 int main() {
tombracer 0:870ce81eb888 107 //LCD init
tombracer 0:870ce81eb888 108 BusOut *data=new BusOut(p7,p8,p9,p10,p11,p12,p15,p16);
tombracer 0:870ce81eb888 109 HD44780LCD8bit* lcd=new HD44780LCD8bit(16,2,data, p6, p5);
tombracer 0:870ce81eb888 110 lcd->init();
tombracer 0:870ce81eb888 111 lcd->writeText(0,0,"Alustetaan..");
tombracer 0:870ce81eb888 112
tombracer 0:870ce81eb888 113 // set some default time to these values on the ds1307 connected device
tombracer 0:870ce81eb888 114 // test_rw(my1307.settime( sec, min, hours, day, date, month, year));
tombracer 0:870ce81eb888 115
tombracer 0:870ce81eb888 116 wait(1);
tombracer 0:870ce81eb888 117
tombracer 0:870ce81eb888 118 //sensor switches pull down the mbed pins when triggered
tombracer 0:870ce81eb888 119 top.mode(PullUp);
tombracer 0:870ce81eb888 120 aup.mode(PullUp);
tombracer 0:870ce81eb888 121 bdw.mode(PullUp);
tombracer 0:870ce81eb888 122 bot.mode(PullUp);
tombracer 0:870ce81eb888 123
tombracer 0:870ce81eb888 124 //pushbuttons also pull down the mbed pins
tombracer 0:870ce81eb888 125 menuButton.mode(PullUp);
tombracer 0:870ce81eb888 126 menuUp.mode(PullUp);
tombracer 0:870ce81eb888 127 menuDown.mode(PullUp);
tombracer 0:870ce81eb888 128
tombracer 0:870ce81eb888 129 mena = 1; //enable the L293D
tombracer 0:870ce81eb888 130 mdown = 0;
tombracer 0:870ce81eb888 131 mup = 0;
tombracer 0:870ce81eb888 132
tombracer 0:870ce81eb888 133 //do a test run at start to find out where lift is now
tombracer 0:870ce81eb888 134 lcd->writeText(0,0,"Menossa alas");
tombracer 0:870ce81eb888 135 gotoBot();
tombracer 0:870ce81eb888 136
tombracer 0:870ce81eb888 137 lcd->clear();
tombracer 0:870ce81eb888 138 wait(0.1);
tombracer 0:870ce81eb888 139 lcd->writeText(0,0,"Menossa");
tombracer 0:870ce81eb888 140 wait(0.1);
tombracer 0:870ce81eb888 141 lcd->writeText(0,1,"valmiustilaan");
tombracer 0:870ce81eb888 142 gotoAup();
tombracer 0:870ce81eb888 143
tombracer 0:870ce81eb888 144 //setup doorbell interrupt and menu button interrupt
tombracer 0:870ce81eb888 145 dbtrig.rise(&doorbell);
tombracer 0:870ce81eb888 146 menuButton.fall(&menuSetup);
tombracer 0:870ce81eb888 147
tombracer 0:870ce81eb888 148 //main loop
tombracer 0:870ce81eb888 149 while(1) {
tombracer 0:870ce81eb888 150
tombracer 0:870ce81eb888 151 // DISPLAY CURRENT TIME AND DATE /////////////////////
tombracer 0:870ce81eb888 152
tombracer 0:870ce81eb888 153 if(trigState==0 && menuState==0){
tombracer 0:870ce81eb888 154 lcd->clear();
tombracer 0:870ce81eb888 155 wait(0.1);
tombracer 0:870ce81eb888 156
tombracer 0:870ce81eb888 157 //read time from ds1307
tombracer 0:870ce81eb888 158 test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));
tombracer 0:870ce81eb888 159 lcd->locate(0,0);
tombracer 0:870ce81eb888 160 if (day == 1)
tombracer 0:870ce81eb888 161 lcd->printf("Su");
tombracer 0:870ce81eb888 162 if (day == 2)
tombracer 0:870ce81eb888 163 lcd->printf("Ma");
tombracer 0:870ce81eb888 164 if (day == 3)
tombracer 0:870ce81eb888 165 lcd->printf("Ti");
tombracer 0:870ce81eb888 166 if (day == 4)
tombracer 0:870ce81eb888 167 lcd->printf("Ke");
tombracer 0:870ce81eb888 168 if (day == 5)
tombracer 0:870ce81eb888 169 lcd->printf("To");
tombracer 0:870ce81eb888 170 if (day == 6)
tombracer 0:870ce81eb888 171 lcd->printf("Pe");
tombracer 0:870ce81eb888 172 if (day == 7)
tombracer 0:870ce81eb888 173 lcd->printf("La");
tombracer 0:870ce81eb888 174
tombracer 0:870ce81eb888 175 lcd->printf(" %.2D",date);
tombracer 0:870ce81eb888 176 lcd->printf(".%.2D",month);
tombracer 0:870ce81eb888 177 lcd->printf(".20%.2D",year);
tombracer 0:870ce81eb888 178
tombracer 0:870ce81eb888 179 lcd->locate(0,1);
tombracer 0:870ce81eb888 180 lcd->printf("Klo %.2D",hours);
tombracer 0:870ce81eb888 181 lcd->printf(":%.2D",min);
tombracer 0:870ce81eb888 182 //lcd->printf(":%.2D",sec);
tombracer 0:870ce81eb888 183
tombracer 0:870ce81eb888 184 //'nonblocking' wait 5 sec
tombracer 0:870ce81eb888 185 for(int i=0;i<50;i++) {
tombracer 0:870ce81eb888 186 if(trigState==0 && menuState==0) {
tombracer 0:870ce81eb888 187 wait(0.1);
tombracer 0:870ce81eb888 188 }//if
tombracer 0:870ce81eb888 189 else {
tombracer 0:870ce81eb888 190 //break out of loop is doorbell
tombracer 0:870ce81eb888 191 //is triggered
tombracer 0:870ce81eb888 192 break;
tombracer 0:870ce81eb888 193 }//else
tombracer 0:870ce81eb888 194 }//for
tombracer 0:870ce81eb888 195 }//if trigState=0
tombracer 0:870ce81eb888 196
tombracer 0:870ce81eb888 197 // DISPLAY LAST DOORBELL PRESS FROM LOG FILE /////////////////
tombracer 0:870ce81eb888 198
tombracer 0:870ce81eb888 199 if(trigState==0 && menuState==0) {
tombracer 0:870ce81eb888 200
tombracer 0:870ce81eb888 201 //read locally stored log file
tombracer 0:870ce81eb888 202 led1=led2=1;
tombracer 0:870ce81eb888 203
tombracer 0:870ce81eb888 204 char buf[16]; //read 16 chars
tombracer 0:870ce81eb888 205
tombracer 0:870ce81eb888 206 FILE *fp = fopen( "/local/doorbell.txt", "r");
tombracer 0:870ce81eb888 207
tombracer 0:870ce81eb888 208 if(fp!=NULL) {
tombracer 0:870ce81eb888 209 fgets(buf, sizeof(buf)+1, fp);
tombracer 0:870ce81eb888 210 fclose(fp);
tombracer 0:870ce81eb888 211 }//if not fp
tombracer 0:870ce81eb888 212
tombracer 0:870ce81eb888 213 led1=led2=0;
tombracer 0:870ce81eb888 214
tombracer 0:870ce81eb888 215 //print last doorbell ring on lcd
tombracer 0:870ce81eb888 216 lcd->clear();
tombracer 0:870ce81eb888 217 wait(0.1);
tombracer 0:870ce81eb888 218 lcd->locate(0,0);
tombracer 0:870ce81eb888 219 lcd->printf("Edellinen soitto");
tombracer 0:870ce81eb888 220 lcd->locate(0,1);
tombracer 0:870ce81eb888 221 lcd->printf("%s", buf);
tombracer 0:870ce81eb888 222
tombracer 0:870ce81eb888 223 //'nonblocking' wait 5 sec
tombracer 0:870ce81eb888 224 for(int i=0;i<50;i++) {
tombracer 0:870ce81eb888 225 if(trigState==0 && menuState==0) {
tombracer 0:870ce81eb888 226 wait(0.1);
tombracer 0:870ce81eb888 227 }//if
tombracer 0:870ce81eb888 228 else {
tombracer 0:870ce81eb888 229 //break out of loop is doorbell
tombracer 0:870ce81eb888 230 //is triggered
tombracer 0:870ce81eb888 231 break;
tombracer 0:870ce81eb888 232 }//else
tombracer 0:870ce81eb888 233 }//for
tombracer 0:870ce81eb888 234 }//if trigState=0
tombracer 0:870ce81eb888 235
tombracer 0:870ce81eb888 236 //DOORBELL IS PRESSED////////////////////////////
tombracer 0:870ce81eb888 237 if(trigState==1) {
tombracer 0:870ce81eb888 238 lcd->clear();
tombracer 0:870ce81eb888 239 wait(0.1);
tombracer 0:870ce81eb888 240 lcd->writeText(0,0,"Ovikello soi!");
tombracer 0:870ce81eb888 241
tombracer 0:870ce81eb888 242 //log last doorbell press to local filesystem
tombracer 0:870ce81eb888 243 test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));
tombracer 0:870ce81eb888 244
tombracer 0:870ce81eb888 245 led1=led2=1;
tombracer 0:870ce81eb888 246 FILE *fp = fopen("/local/doorbell.txt", "w");
tombracer 0:870ce81eb888 247
tombracer 0:870ce81eb888 248 //16 chars example
tombracer 0:870ce81eb888 249 //1234567890123456
tombracer 0:870ce81eb888 250 //Edellinen soitto
tombracer 0:870ce81eb888 251 //Ma 10.10. 10:10
tombracer 0:870ce81eb888 252 if (day == 1)
tombracer 0:870ce81eb888 253 fprintf(fp, "Su");
tombracer 0:870ce81eb888 254 if (day == 2)
tombracer 0:870ce81eb888 255 fprintf(fp, "Ma");
tombracer 0:870ce81eb888 256 if (day == 3)
tombracer 0:870ce81eb888 257 fprintf(fp, "Ti");
tombracer 0:870ce81eb888 258 if (day == 4)
tombracer 0:870ce81eb888 259 fprintf(fp, "Ke");
tombracer 0:870ce81eb888 260 if (day == 5)
tombracer 0:870ce81eb888 261 fprintf(fp, "To");
tombracer 0:870ce81eb888 262 if (day == 6)
tombracer 0:870ce81eb888 263 fprintf(fp, "Pe");
tombracer 0:870ce81eb888 264 if (day == 7)
tombracer 0:870ce81eb888 265 fprintf(fp, "La");
tombracer 0:870ce81eb888 266
tombracer 0:870ce81eb888 267 fprintf(fp, " %.2D",date);
tombracer 0:870ce81eb888 268 fprintf(fp, ".%.2D",month);
tombracer 0:870ce81eb888 269 fprintf(fp, ". %.2D",hours);
tombracer 0:870ce81eb888 270 fprintf(fp, ":%.2D",min);
tombracer 0:870ce81eb888 271 fclose(fp);
tombracer 0:870ce81eb888 272 led1=led2=0;
tombracer 0:870ce81eb888 273
tombracer 0:870ce81eb888 274 //Write doorbell message to wifly serial.
tombracer 0:870ce81eb888 275 //t-codes:
tombracer 0:870ce81eb888 276 //1: critical
tombracer 0:870ce81eb888 277 //2: error/warning
tombracer 0:870ce81eb888 278 //3: info
tombracer 0:870ce81eb888 279 toWifly.printf("Ovikello&t=3");
tombracer 0:870ce81eb888 280
tombracer 0:870ce81eb888 281 //run the lift
tombracer 0:870ce81eb888 282 gotoTop(); //launch ball
tombracer 0:870ce81eb888 283
tombracer 0:870ce81eb888 284 //wait maximum 20 seconds
tombracer 0:870ce81eb888 285 //(in case bdw sensor fails)
tombracer 0:870ce81eb888 286 int i=0;
tombracer 0:870ce81eb888 287
tombracer 0:870ce81eb888 288 //wait for ball to get down
tombracer 0:870ce81eb888 289 while(bdw) {
tombracer 0:870ce81eb888 290 i++;
tombracer 0:870ce81eb888 291 led4 = !led4;
tombracer 0:870ce81eb888 292 wait(0.05);
tombracer 0:870ce81eb888 293 //100x 0.05 sec = 5 sec
tombracer 0:870ce81eb888 294 //need to count to 400 before break
tombracer 0:870ce81eb888 295
tombracer 0:870ce81eb888 296 //break out of while after 20 seconds
tombracer 0:870ce81eb888 297 if(i>400) {
tombracer 0:870ce81eb888 298 lcd->clear(); //1234567890123456
tombracer 0:870ce81eb888 299 lcd->writeText(0,0,"Palloa ei kuulu,");
tombracer 0:870ce81eb888 300 wait(0.1);
tombracer 0:870ce81eb888 301 lcd->writeText(0,1,"haetaan se silti");
tombracer 0:870ce81eb888 302 wait(3);
tombracer 0:870ce81eb888 303 break;
tombracer 0:870ce81eb888 304 }//if
tombracer 0:870ce81eb888 305 }//while bdw
tombracer 0:870ce81eb888 306 led4=0;
tombracer 0:870ce81eb888 307
tombracer 0:870ce81eb888 308 lcd->clear();
tombracer 0:870ce81eb888 309 lcd->writeText(0,0,"Menossa alas");
tombracer 0:870ce81eb888 310 gotoBot();
tombracer 0:870ce81eb888 311
tombracer 0:870ce81eb888 312 lcd->clear();
tombracer 0:870ce81eb888 313 wait(0.1);
tombracer 0:870ce81eb888 314 lcd->writeText(0,0,"Menossa");
tombracer 0:870ce81eb888 315 wait(0.1);
tombracer 0:870ce81eb888 316 lcd->writeText(0,1,"valmiustilaan");
tombracer 0:870ce81eb888 317 gotoAup();
tombracer 0:870ce81eb888 318
tombracer 0:870ce81eb888 319 //reset interrupt state
tombracer 0:870ce81eb888 320 trigState=0;
tombracer 0:870ce81eb888 321 }//if doorbell
tombracer 0:870ce81eb888 322
tombracer 0:870ce81eb888 323 //if menu button is pressed
tombracer 0:870ce81eb888 324 if(menuState==1) {
tombracer 0:870ce81eb888 325 //reset menu state
tombracer 0:870ce81eb888 326 menuState = 0;
tombracer 0:870ce81eb888 327
tombracer 0:870ce81eb888 328 //read time from ds1307
tombracer 0:870ce81eb888 329 test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));
tombracer 0:870ce81eb888 330
tombracer 0:870ce81eb888 331 //SET HOURS///////////////////////////////////
tombracer 0:870ce81eb888 332
tombracer 0:870ce81eb888 333 lcd->clear();
tombracer 0:870ce81eb888 334 wait(0.1);
tombracer 0:870ce81eb888 335 lcd->writeText(0,0,"Aseta tunti");
tombracer 0:870ce81eb888 336 wait(0.1);
tombracer 0:870ce81eb888 337
tombracer 0:870ce81eb888 338 //print current hour on second row
tombracer 0:870ce81eb888 339 lcd->locate(0,1);
tombracer 0:870ce81eb888 340 lcd->printf("%.2D",hours);
tombracer 0:870ce81eb888 341
tombracer 0:870ce81eb888 342 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 343 while(menuButton) {
tombracer 0:870ce81eb888 344 //if menu up button is pressed
tombracer 0:870ce81eb888 345 if(!menuUp) {
tombracer 0:870ce81eb888 346 wait(0.07); //debounce
tombracer 0:870ce81eb888 347 if(!menuUp) {
tombracer 0:870ce81eb888 348 hours++;
tombracer 0:870ce81eb888 349 if(hours>23) hours=0;
tombracer 0:870ce81eb888 350 lcd->locate(0,1);
tombracer 0:870ce81eb888 351 lcd->printf("%.2D",hours);
tombracer 0:870ce81eb888 352 }//inner if
tombracer 0:870ce81eb888 353 }//if menuup
tombracer 0:870ce81eb888 354
tombracer 0:870ce81eb888 355 //if menu down button is pressed
tombracer 0:870ce81eb888 356 if(!menuDown) {
tombracer 0:870ce81eb888 357 wait(0.07); //debounce
tombracer 0:870ce81eb888 358 if(!menuDown) {
tombracer 0:870ce81eb888 359 hours--;
tombracer 0:870ce81eb888 360 if(hours<0) hours=23;
tombracer 0:870ce81eb888 361 lcd->locate(0,1);
tombracer 0:870ce81eb888 362 lcd->printf("%.2D",hours);
tombracer 0:870ce81eb888 363 }//inner if
tombracer 0:870ce81eb888 364 }//if menuup
tombracer 0:870ce81eb888 365 }//while not menustate hours
tombracer 0:870ce81eb888 366
tombracer 0:870ce81eb888 367 //SET MINUTES/////////////////////////////////////
tombracer 0:870ce81eb888 368
tombracer 0:870ce81eb888 369 lcd->clear();
tombracer 0:870ce81eb888 370 wait(0.1);
tombracer 0:870ce81eb888 371 lcd->writeText(0,0,"Aseta minuutti");
tombracer 0:870ce81eb888 372 wait(0.1);
tombracer 0:870ce81eb888 373
tombracer 0:870ce81eb888 374 //print current min on second row
tombracer 0:870ce81eb888 375 lcd->locate(0,1);
tombracer 0:870ce81eb888 376 lcd->printf("%.2D",min);
tombracer 0:870ce81eb888 377
tombracer 0:870ce81eb888 378 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 379 while(menuButton) {
tombracer 0:870ce81eb888 380 //if menu up button is pressed
tombracer 0:870ce81eb888 381 if(!menuUp) {
tombracer 0:870ce81eb888 382 wait(0.07); //debounce
tombracer 0:870ce81eb888 383 if(!menuUp) {
tombracer 0:870ce81eb888 384 min++;
tombracer 0:870ce81eb888 385 if(min>59) min=0;
tombracer 0:870ce81eb888 386 lcd->locate(0,1);
tombracer 0:870ce81eb888 387 lcd->printf("%.2D",min);
tombracer 0:870ce81eb888 388 }//inner if
tombracer 0:870ce81eb888 389 }//if menuup
tombracer 0:870ce81eb888 390
tombracer 0:870ce81eb888 391 //if menu down button is pressed
tombracer 0:870ce81eb888 392 if(!menuDown) {
tombracer 0:870ce81eb888 393 wait(0.07); //debounce
tombracer 0:870ce81eb888 394 if(!menuDown) {
tombracer 0:870ce81eb888 395 min--;
tombracer 0:870ce81eb888 396 if(min<0) min=59;
tombracer 0:870ce81eb888 397 lcd->locate(0,1);
tombracer 0:870ce81eb888 398 lcd->printf("%.2D",min);
tombracer 0:870ce81eb888 399 }//inner if
tombracer 0:870ce81eb888 400 }//if menuup
tombracer 0:870ce81eb888 401 }//while not menustate min
tombracer 0:870ce81eb888 402
tombracer 0:870ce81eb888 403 //SET SECONDS/////////////////////////////////
tombracer 0:870ce81eb888 404
tombracer 0:870ce81eb888 405 lcd->clear();
tombracer 0:870ce81eb888 406 wait(0.1);
tombracer 0:870ce81eb888 407 lcd->writeText(0,0,"Aseta sekunti");
tombracer 0:870ce81eb888 408 wait(0.1);
tombracer 0:870ce81eb888 409
tombracer 0:870ce81eb888 410 //print current sec on second row
tombracer 0:870ce81eb888 411 lcd->locate(0,1);
tombracer 0:870ce81eb888 412 lcd->printf("%.2D",sec);
tombracer 0:870ce81eb888 413
tombracer 0:870ce81eb888 414 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 415 while(menuButton) {
tombracer 0:870ce81eb888 416 //if menu up button is pressed
tombracer 0:870ce81eb888 417 if(!menuUp) {
tombracer 0:870ce81eb888 418 wait(0.07); //debounce
tombracer 0:870ce81eb888 419 if(!menuUp) {
tombracer 0:870ce81eb888 420 sec++;
tombracer 0:870ce81eb888 421 if(sec>59) sec=0;
tombracer 0:870ce81eb888 422 lcd->locate(0,1);
tombracer 0:870ce81eb888 423 lcd->printf("%.2D",sec);
tombracer 0:870ce81eb888 424 }//inner if
tombracer 0:870ce81eb888 425 }//if menuup
tombracer 0:870ce81eb888 426
tombracer 0:870ce81eb888 427 //if menu down button is pressed
tombracer 0:870ce81eb888 428 if(!menuDown) {
tombracer 0:870ce81eb888 429 wait(0.07); //debounce
tombracer 0:870ce81eb888 430 if(!menuDown) {
tombracer 0:870ce81eb888 431 sec--;
tombracer 0:870ce81eb888 432 if(sec<0) sec=59;
tombracer 0:870ce81eb888 433 lcd->locate(0,1);
tombracer 0:870ce81eb888 434 lcd->printf("%.2D",sec);
tombracer 0:870ce81eb888 435 }//inner if
tombracer 0:870ce81eb888 436 }//if menuup
tombracer 0:870ce81eb888 437 }//while not menustate sec
tombracer 0:870ce81eb888 438
tombracer 0:870ce81eb888 439 //SET WEEKDAY/////////////////////////////////
tombracer 0:870ce81eb888 440
tombracer 0:870ce81eb888 441 lcd->clear();
tombracer 0:870ce81eb888 442 wait(0.1);
tombracer 0:870ce81eb888 443 lcd->writeText(0,0,"Aseta viikonpv");
tombracer 0:870ce81eb888 444 wait(0.1);
tombracer 0:870ce81eb888 445
tombracer 0:870ce81eb888 446 //print current weekday on second row
tombracer 0:870ce81eb888 447 lcd->locate(0,1);
tombracer 0:870ce81eb888 448
tombracer 0:870ce81eb888 449 if (day == 1)
tombracer 0:870ce81eb888 450 lcd->printf("Su");
tombracer 0:870ce81eb888 451 if (day == 2)
tombracer 0:870ce81eb888 452 lcd->printf("Ma");
tombracer 0:870ce81eb888 453 if (day == 3)
tombracer 0:870ce81eb888 454 lcd->printf("Ti");
tombracer 0:870ce81eb888 455 if (day == 4)
tombracer 0:870ce81eb888 456 lcd->printf("Ke");
tombracer 0:870ce81eb888 457 if (day == 5)
tombracer 0:870ce81eb888 458 lcd->printf("To");
tombracer 0:870ce81eb888 459 if (day == 6)
tombracer 0:870ce81eb888 460 lcd->printf("Pe");
tombracer 0:870ce81eb888 461 if (day == 7)
tombracer 0:870ce81eb888 462 lcd->printf("La");
tombracer 0:870ce81eb888 463
tombracer 0:870ce81eb888 464 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 465 while(menuButton) {
tombracer 0:870ce81eb888 466 //if menu up button is pressed
tombracer 0:870ce81eb888 467 if(!menuUp) {
tombracer 0:870ce81eb888 468 wait(0.07); //debounce
tombracer 0:870ce81eb888 469 if(!menuUp) {
tombracer 0:870ce81eb888 470 day++;
tombracer 0:870ce81eb888 471 if(day>7) day=1;
tombracer 0:870ce81eb888 472 lcd->locate(0,1);
tombracer 0:870ce81eb888 473 if (day == 1)
tombracer 0:870ce81eb888 474 lcd->printf("Su");
tombracer 0:870ce81eb888 475 if (day == 2)
tombracer 0:870ce81eb888 476 lcd->printf("Ma");
tombracer 0:870ce81eb888 477 if (day == 3)
tombracer 0:870ce81eb888 478 lcd->printf("Ti");
tombracer 0:870ce81eb888 479 if (day == 4)
tombracer 0:870ce81eb888 480 lcd->printf("Ke");
tombracer 0:870ce81eb888 481 if (day == 5)
tombracer 0:870ce81eb888 482 lcd->printf("To");
tombracer 0:870ce81eb888 483 if (day == 6)
tombracer 0:870ce81eb888 484 lcd->printf("Pe");
tombracer 0:870ce81eb888 485 if (day == 7)
tombracer 0:870ce81eb888 486 lcd->printf("La");
tombracer 0:870ce81eb888 487 }//inner if
tombracer 0:870ce81eb888 488 }//if menuup
tombracer 0:870ce81eb888 489
tombracer 0:870ce81eb888 490 //if menu down button is pressed
tombracer 0:870ce81eb888 491 if(!menuDown) {
tombracer 0:870ce81eb888 492 wait(0.07); //debounce
tombracer 0:870ce81eb888 493 if(!menuDown) {
tombracer 0:870ce81eb888 494 day--;
tombracer 0:870ce81eb888 495 if(day<1) day=7;
tombracer 0:870ce81eb888 496 lcd->locate(0,1);
tombracer 0:870ce81eb888 497 if (day == 1)
tombracer 0:870ce81eb888 498 lcd->printf("Su");
tombracer 0:870ce81eb888 499 if (day == 2)
tombracer 0:870ce81eb888 500 lcd->printf("Ma");
tombracer 0:870ce81eb888 501 if (day == 3)
tombracer 0:870ce81eb888 502 lcd->printf("Ti");
tombracer 0:870ce81eb888 503 if (day == 4)
tombracer 0:870ce81eb888 504 lcd->printf("Ke");
tombracer 0:870ce81eb888 505 if (day == 5)
tombracer 0:870ce81eb888 506 lcd->printf("To");
tombracer 0:870ce81eb888 507 if (day == 6)
tombracer 0:870ce81eb888 508 lcd->printf("Pe");
tombracer 0:870ce81eb888 509 if (day == 7)
tombracer 0:870ce81eb888 510 lcd->printf("La");
tombracer 0:870ce81eb888 511 }//inner if
tombracer 0:870ce81eb888 512 }//if menuup
tombracer 0:870ce81eb888 513 }//while not menustate weekday
tombracer 0:870ce81eb888 514
tombracer 0:870ce81eb888 515 //SET DATE/////////////////////////////////
tombracer 0:870ce81eb888 516
tombracer 0:870ce81eb888 517 lcd->clear();
tombracer 0:870ce81eb888 518 wait(0.1);
tombracer 0:870ce81eb888 519 lcd->writeText(0,0,"Aseta pvm");
tombracer 0:870ce81eb888 520 wait(0.1);
tombracer 0:870ce81eb888 521
tombracer 0:870ce81eb888 522 //print current date on second row
tombracer 0:870ce81eb888 523 lcd->locate(0,1);
tombracer 0:870ce81eb888 524 lcd->printf("%.2D",date);
tombracer 0:870ce81eb888 525
tombracer 0:870ce81eb888 526 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 527 while(menuButton) {
tombracer 0:870ce81eb888 528 //if menu up button is pressed
tombracer 0:870ce81eb888 529 if(!menuUp) {
tombracer 0:870ce81eb888 530 wait(0.07); //debounce
tombracer 0:870ce81eb888 531 if(!menuUp) {
tombracer 0:870ce81eb888 532 date++;
tombracer 0:870ce81eb888 533 if(date>31) date=1;
tombracer 0:870ce81eb888 534 lcd->locate(0,1);
tombracer 0:870ce81eb888 535 lcd->printf("%.2D",date);
tombracer 0:870ce81eb888 536 }//inner if
tombracer 0:870ce81eb888 537 }//if menuup
tombracer 0:870ce81eb888 538
tombracer 0:870ce81eb888 539 //if menu down button is pressed
tombracer 0:870ce81eb888 540 if(!menuDown) {
tombracer 0:870ce81eb888 541 wait(0.07); //debounce
tombracer 0:870ce81eb888 542 if(!menuDown) {
tombracer 0:870ce81eb888 543 date--;
tombracer 0:870ce81eb888 544 if(date<1) date=31;
tombracer 0:870ce81eb888 545 lcd->locate(0,1);
tombracer 0:870ce81eb888 546 lcd->printf("%.2D",date);
tombracer 0:870ce81eb888 547 }//inner if
tombracer 0:870ce81eb888 548 }//if menuup
tombracer 0:870ce81eb888 549 }//while not menustate date
tombracer 0:870ce81eb888 550
tombracer 0:870ce81eb888 551 //SET MONTH/////////////////////////////////
tombracer 0:870ce81eb888 552
tombracer 0:870ce81eb888 553 lcd->clear();
tombracer 0:870ce81eb888 554 wait(0.1);
tombracer 0:870ce81eb888 555 lcd->writeText(0,0,"Aseta kuukausi");
tombracer 0:870ce81eb888 556 wait(0.1);
tombracer 0:870ce81eb888 557
tombracer 0:870ce81eb888 558 //print current sec on second row
tombracer 0:870ce81eb888 559 lcd->locate(0,1);
tombracer 0:870ce81eb888 560 lcd->printf("%.2D",month);
tombracer 0:870ce81eb888 561
tombracer 0:870ce81eb888 562 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 563 while(menuButton) {
tombracer 0:870ce81eb888 564 //if menu up button is pressed
tombracer 0:870ce81eb888 565 if(!menuUp) {
tombracer 0:870ce81eb888 566 wait(0.07); //debounce
tombracer 0:870ce81eb888 567 if(!menuUp) {
tombracer 0:870ce81eb888 568 month++;
tombracer 0:870ce81eb888 569 if(month>12) month=1;
tombracer 0:870ce81eb888 570 lcd->locate(0,1);
tombracer 0:870ce81eb888 571 lcd->printf("%.2D",month);
tombracer 0:870ce81eb888 572 }//inner if
tombracer 0:870ce81eb888 573 }//if menuup
tombracer 0:870ce81eb888 574
tombracer 0:870ce81eb888 575 //if menu down button is pressed
tombracer 0:870ce81eb888 576 if(!menuDown) {
tombracer 0:870ce81eb888 577 wait(0.07); //debounce
tombracer 0:870ce81eb888 578 if(!menuDown) {
tombracer 0:870ce81eb888 579 month--;
tombracer 0:870ce81eb888 580 if(month<1) month=12;
tombracer 0:870ce81eb888 581 lcd->locate(0,1);
tombracer 0:870ce81eb888 582 lcd->printf("%.2D",month);
tombracer 0:870ce81eb888 583 }//inner if
tombracer 0:870ce81eb888 584 }//if menuup
tombracer 0:870ce81eb888 585 }//while not menustate month
tombracer 0:870ce81eb888 586
tombracer 0:870ce81eb888 587 //SET YEAR/////////////////////////////////
tombracer 0:870ce81eb888 588
tombracer 0:870ce81eb888 589 lcd->clear();
tombracer 0:870ce81eb888 590 wait(0.1);
tombracer 0:870ce81eb888 591 lcd->writeText(0,0,"Aseta vuosi");
tombracer 0:870ce81eb888 592 wait(0.1);
tombracer 0:870ce81eb888 593
tombracer 0:870ce81eb888 594 //print current year on second row
tombracer 0:870ce81eb888 595 lcd->locate(0,1);
tombracer 0:870ce81eb888 596 lcd->printf("%.2D",year);
tombracer 0:870ce81eb888 597
tombracer 0:870ce81eb888 598 //loop until menu state button is pressed again
tombracer 0:870ce81eb888 599 while(menuButton) {
tombracer 0:870ce81eb888 600 //if menu up button is pressed
tombracer 0:870ce81eb888 601 if(!menuUp) {
tombracer 0:870ce81eb888 602 wait(0.07); //debounce
tombracer 0:870ce81eb888 603 if(!menuUp) {
tombracer 0:870ce81eb888 604 year++;
tombracer 0:870ce81eb888 605 if(sec>2100) year=2000;
tombracer 0:870ce81eb888 606 lcd->locate(0,1);
tombracer 0:870ce81eb888 607 lcd->printf("%.2D",year);
tombracer 0:870ce81eb888 608 }//inner if
tombracer 0:870ce81eb888 609 }//if menuup
tombracer 0:870ce81eb888 610
tombracer 0:870ce81eb888 611 //if menu down button is pressed
tombracer 0:870ce81eb888 612 if(!menuDown) {
tombracer 0:870ce81eb888 613 wait(0.07); //debounce
tombracer 0:870ce81eb888 614 if(!menuDown) {
tombracer 0:870ce81eb888 615 year--;
tombracer 0:870ce81eb888 616 if(year<2000) year=2100;
tombracer 0:870ce81eb888 617 lcd->locate(0,1);
tombracer 0:870ce81eb888 618 lcd->printf("%.2D",year);
tombracer 0:870ce81eb888 619 }//inner if
tombracer 0:870ce81eb888 620 }//if menuup
tombracer 0:870ce81eb888 621 }//while not menustate year
tombracer 0:870ce81eb888 622
tombracer 0:870ce81eb888 623 //store new values in ds1307
tombracer 0:870ce81eb888 624 test_rw(my1307.settime( sec, min, hours, day, date, month, year));
tombracer 0:870ce81eb888 625 menuState = 0;
tombracer 0:870ce81eb888 626 }//if menustate
tombracer 0:870ce81eb888 627
tombracer 0:870ce81eb888 628 }//while 1
tombracer 0:870ce81eb888 629 }//main