![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
An alarm clock that wakes you up naturally!
Dependencies: 4DGL-uLCD-SE DebounceIn mbed RPCInterface
main.cpp@0:397faf7a0a52, 2017-03-16 (annotated)
- Committer:
- ooglezoiden
- Date:
- Thu Mar 16 19:38:55 2017 +0000
- Revision:
- 0:397faf7a0a52
- Child:
- 1:57e06832197a
done!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ooglezoiden | 0:397faf7a0a52 | 1 | #include "mbed.h" |
ooglezoiden | 0:397faf7a0a52 | 2 | #include "uLCD_4DGL.h" |
ooglezoiden | 0:397faf7a0a52 | 3 | #include "DebounceIn.h" |
ooglezoiden | 0:397faf7a0a52 | 4 | |
ooglezoiden | 0:397faf7a0a52 | 5 | Timeout alarm; |
ooglezoiden | 0:397faf7a0a52 | 6 | Timer t; |
ooglezoiden | 0:397faf7a0a52 | 7 | PwmOut lights(p25); |
ooglezoiden | 0:397faf7a0a52 | 8 | uLCD_4DGL uLCD(p9,p10,p11); |
ooglezoiden | 0:397faf7a0a52 | 9 | AnalogIn photocell(p15); |
ooglezoiden | 0:397faf7a0a52 | 10 | DebounceIn pb1(p8); |
ooglezoiden | 0:397faf7a0a52 | 11 | DebounceIn pb2(p7); |
ooglezoiden | 0:397faf7a0a52 | 12 | Serial blue(p28,p27); |
ooglezoiden | 0:397faf7a0a52 | 13 | |
ooglezoiden | 0:397faf7a0a52 | 14 | |
ooglezoiden | 0:397faf7a0a52 | 15 | void lightsOn(){ |
ooglezoiden | 0:397faf7a0a52 | 16 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 17 | uLCD.printf("Turning on lights!"); |
ooglezoiden | 0:397faf7a0a52 | 18 | //lights = 1; |
ooglezoiden | 0:397faf7a0a52 | 19 | while(lights<=0.99f){ |
ooglezoiden | 0:397faf7a0a52 | 20 | lights = lights + .01f; |
ooglezoiden | 0:397faf7a0a52 | 21 | wait(1); |
ooglezoiden | 0:397faf7a0a52 | 22 | } |
ooglezoiden | 0:397faf7a0a52 | 23 | while(1);//do nothing until reset |
ooglezoiden | 0:397faf7a0a52 | 24 | } |
ooglezoiden | 0:397faf7a0a52 | 25 | |
ooglezoiden | 0:397faf7a0a52 | 26 | void lightMode(){ |
ooglezoiden | 0:397faf7a0a52 | 27 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 28 | uLCD.printf("not bright out yet!\n"); |
ooglezoiden | 0:397faf7a0a52 | 29 | while(photocell.read() < .9f){ |
ooglezoiden | 0:397faf7a0a52 | 30 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 31 | uLCD.printf("not bright out yet!\n"); |
ooglezoiden | 0:397faf7a0a52 | 32 | } |
ooglezoiden | 0:397faf7a0a52 | 33 | lightsOn(); |
ooglezoiden | 0:397faf7a0a52 | 34 | } |
ooglezoiden | 0:397faf7a0a52 | 35 | |
ooglezoiden | 0:397faf7a0a52 | 36 | void timerMode(int time){ |
ooglezoiden | 0:397faf7a0a52 | 37 | alarm.attach(&lightsOn, time); |
ooglezoiden | 0:397faf7a0a52 | 38 | t.start(); |
ooglezoiden | 0:397faf7a0a52 | 39 | float curTime; |
ooglezoiden | 0:397faf7a0a52 | 40 | while(1){ |
ooglezoiden | 0:397faf7a0a52 | 41 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 42 | curTime = t.read(); |
ooglezoiden | 0:397faf7a0a52 | 43 | uLCD.printf("%f secs since alarm set.\n", curTime); |
ooglezoiden | 0:397faf7a0a52 | 44 | } |
ooglezoiden | 0:397faf7a0a52 | 45 | } |
ooglezoiden | 0:397faf7a0a52 | 46 | |
ooglezoiden | 0:397faf7a0a52 | 47 | int getTime(){ |
ooglezoiden | 0:397faf7a0a52 | 48 | bool done = false; |
ooglezoiden | 0:397faf7a0a52 | 49 | int time[3] = {0,0,0}; |
ooglezoiden | 0:397faf7a0a52 | 50 | int modifying = 0; |
ooglezoiden | 0:397faf7a0a52 | 51 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 52 | uLCD.printf("Connect Bluetooth now.\n\n"); |
ooglezoiden | 0:397faf7a0a52 | 53 | uLCD.printf("Up and down change time\n left and right select unit.\n"); |
ooglezoiden | 0:397faf7a0a52 | 54 | //uLCD.printf("This message will display for five seconds. Then input your desired time."); |
ooglezoiden | 0:397faf7a0a52 | 55 | wait(5); |
ooglezoiden | 0:397faf7a0a52 | 56 | char bnum = 0; |
ooglezoiden | 0:397faf7a0a52 | 57 | char bhit = 0; |
ooglezoiden | 0:397faf7a0a52 | 58 | while(!done){ |
ooglezoiden | 0:397faf7a0a52 | 59 | uLCD.cls(); |
ooglezoiden | 0:397faf7a0a52 | 60 | uLCD.printf("Current timer will last:\n"); |
ooglezoiden | 0:397faf7a0a52 | 61 | uLCD.printf("%d hours, %d mins, %d secs\n", time[2], time[1], time[0]); |
ooglezoiden | 0:397faf7a0a52 | 62 | uLCD.printf("You are now modifying: "); |
ooglezoiden | 0:397faf7a0a52 | 63 | if(modifying == 0){ |
ooglezoiden | 0:397faf7a0a52 | 64 | uLCD.printf("Secs\n"); |
ooglezoiden | 0:397faf7a0a52 | 65 | } else if(modifying == 1){ |
ooglezoiden | 0:397faf7a0a52 | 66 | uLCD.printf("Mins\n"); |
ooglezoiden | 0:397faf7a0a52 | 67 | } else if(modifying == 2){ |
ooglezoiden | 0:397faf7a0a52 | 68 | uLCD.printf("Hours\n"); |
ooglezoiden | 0:397faf7a0a52 | 69 | } |
ooglezoiden | 0:397faf7a0a52 | 70 | uLCD.printf("Press 1 to set the timer to the current value.\n"); |
ooglezoiden | 0:397faf7a0a52 | 71 | if(blue.getc()=='!'){ |
ooglezoiden | 0:397faf7a0a52 | 72 | if(blue.getc()=='B'){ |
ooglezoiden | 0:397faf7a0a52 | 73 | bnum = blue.getc();//button number |
ooglezoiden | 0:397faf7a0a52 | 74 | bhit = blue.getc();//1=hit, 0=release |
ooglezoiden | 0:397faf7a0a52 | 75 | if(blue.getc()==char(~('!' + 'B' + bnum + bhit))){//checksum |
ooglezoiden | 0:397faf7a0a52 | 76 | switch(bnum){ |
ooglezoiden | 0:397faf7a0a52 | 77 | case '1'://number button 1 |
ooglezoiden | 0:397faf7a0a52 | 78 | if(bhit == '1'){ |
ooglezoiden | 0:397faf7a0a52 | 79 | done = true; |
ooglezoiden | 0:397faf7a0a52 | 80 | } |
ooglezoiden | 0:397faf7a0a52 | 81 | break; |
ooglezoiden | 0:397faf7a0a52 | 82 | case '5'://up arrow |
ooglezoiden | 0:397faf7a0a52 | 83 | if(bhit=='1'){ |
ooglezoiden | 0:397faf7a0a52 | 84 | time[modifying]++; |
ooglezoiden | 0:397faf7a0a52 | 85 | } |
ooglezoiden | 0:397faf7a0a52 | 86 | break; |
ooglezoiden | 0:397faf7a0a52 | 87 | case '6'://down arrow |
ooglezoiden | 0:397faf7a0a52 | 88 | if(bhit=='1'&&time[modifying]>0){ |
ooglezoiden | 0:397faf7a0a52 | 89 | time[modifying]--; |
ooglezoiden | 0:397faf7a0a52 | 90 | } |
ooglezoiden | 0:397faf7a0a52 | 91 | break; |
ooglezoiden | 0:397faf7a0a52 | 92 | case '7'://left arrow |
ooglezoiden | 0:397faf7a0a52 | 93 | if(bhit=='1'&&modifying>0){ |
ooglezoiden | 0:397faf7a0a52 | 94 | modifying--; |
ooglezoiden | 0:397faf7a0a52 | 95 | } |
ooglezoiden | 0:397faf7a0a52 | 96 | break; |
ooglezoiden | 0:397faf7a0a52 | 97 | case '8'://right arrow |
ooglezoiden | 0:397faf7a0a52 | 98 | if(bhit=='1'&&modifying<2){ |
ooglezoiden | 0:397faf7a0a52 | 99 | modifying++; |
ooglezoiden | 0:397faf7a0a52 | 100 | } |
ooglezoiden | 0:397faf7a0a52 | 101 | break; |
ooglezoiden | 0:397faf7a0a52 | 102 | } |
ooglezoiden | 0:397faf7a0a52 | 103 | } |
ooglezoiden | 0:397faf7a0a52 | 104 | } |
ooglezoiden | 0:397faf7a0a52 | 105 | } |
ooglezoiden | 0:397faf7a0a52 | 106 | } |
ooglezoiden | 0:397faf7a0a52 | 107 | return time[0] + time[1] * 60 + time[2] * 60 * 60; |
ooglezoiden | 0:397faf7a0a52 | 108 | |
ooglezoiden | 0:397faf7a0a52 | 109 | } |
ooglezoiden | 0:397faf7a0a52 | 110 | |
ooglezoiden | 0:397faf7a0a52 | 111 | int main() { |
ooglezoiden | 0:397faf7a0a52 | 112 | lights = 0; |
ooglezoiden | 0:397faf7a0a52 | 113 | uLCD.printf("LIGHT_ALARM V1.0 Donn Green\n\n"); |
ooglezoiden | 0:397faf7a0a52 | 114 | uLCD.printf("Press Button 1 to begin light activation mode\n"); |
ooglezoiden | 0:397faf7a0a52 | 115 | uLCD.printf("Press Button 2 to begin timer activation mode\n"); |
ooglezoiden | 0:397faf7a0a52 | 116 | pb1.mode(PullDown); |
ooglezoiden | 0:397faf7a0a52 | 117 | pb2.mode(PullDown); |
ooglezoiden | 0:397faf7a0a52 | 118 | lights.period(1.0f/25000.0f); |
ooglezoiden | 0:397faf7a0a52 | 119 | while(!(pb1||pb2)){ |
ooglezoiden | 0:397faf7a0a52 | 120 | //do nothing until a button is pressed |
ooglezoiden | 0:397faf7a0a52 | 121 | } |
ooglezoiden | 0:397faf7a0a52 | 122 | if(pb1){ |
ooglezoiden | 0:397faf7a0a52 | 123 | lightMode(); |
ooglezoiden | 0:397faf7a0a52 | 124 | } |
ooglezoiden | 0:397faf7a0a52 | 125 | else if(pb2){ |
ooglezoiden | 0:397faf7a0a52 | 126 | int time = getTime(); |
ooglezoiden | 0:397faf7a0a52 | 127 | timerMode(time); |
ooglezoiden | 0:397faf7a0a52 | 128 | } |
ooglezoiden | 0:397faf7a0a52 | 129 | } |