This is the program that runs on the Mbell (https://sites.google.com/site/projectmbell)
Dependencies: DS1307 LcdWindow TextLCD mbed
main.cpp@0:870ce81eb888, 2012-10-25 (annotated)
- Committer:
- tombracer
- Date:
- Thu Oct 25 16:19:55 2012 +0000
- Revision:
- 0:870ce81eb888
First "finished" version
Who changed what in which revision?
User | Revision | Line number | New 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 |