An alarm clock that wakes you up naturally!

Dependencies:   4DGL-uLCD-SE DebounceIn mbed RPCInterface

Committer:
ooglezoiden
Date:
Thu Mar 16 19:38:55 2017 +0000
Revision:
0:397faf7a0a52
Child:
1:57e06832197a
done!

Who changed what in which revision?

UserRevisionLine numberNew 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 }