An alarm clock that wakes you up naturally!
Dependencies: 4DGL-uLCD-SE DebounceIn mbed RPCInterface
Diff: main.cpp
- Revision:
- 0:397faf7a0a52
- Child:
- 1:57e06832197a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 16 19:38:55 2017 +0000 @@ -0,0 +1,129 @@ +#include "mbed.h" +#include "uLCD_4DGL.h" +#include "DebounceIn.h" + +Timeout alarm; +Timer t; +PwmOut lights(p25); +uLCD_4DGL uLCD(p9,p10,p11); +AnalogIn photocell(p15); +DebounceIn pb1(p8); +DebounceIn pb2(p7); +Serial blue(p28,p27); + + +void lightsOn(){ + uLCD.cls(); + uLCD.printf("Turning on lights!"); + //lights = 1; + while(lights<=0.99f){ + lights = lights + .01f; + wait(1); + } + while(1);//do nothing until reset +} + +void lightMode(){ + uLCD.cls(); + uLCD.printf("not bright out yet!\n"); + while(photocell.read() < .9f){ + uLCD.cls(); + uLCD.printf("not bright out yet!\n"); + } + lightsOn(); +} + +void timerMode(int time){ + alarm.attach(&lightsOn, time); + t.start(); + float curTime; + while(1){ + uLCD.cls(); + curTime = t.read(); + uLCD.printf("%f secs since alarm set.\n", curTime); + } +} + +int getTime(){ + bool done = false; + int time[3] = {0,0,0}; + int modifying = 0; + uLCD.cls(); + uLCD.printf("Connect Bluetooth now.\n\n"); + uLCD.printf("Up and down change time\n left and right select unit.\n"); + //uLCD.printf("This message will display for five seconds. Then input your desired time."); + wait(5); + char bnum = 0; + char bhit = 0; + while(!done){ + uLCD.cls(); + uLCD.printf("Current timer will last:\n"); + uLCD.printf("%d hours, %d mins, %d secs\n", time[2], time[1], time[0]); + uLCD.printf("You are now modifying: "); + if(modifying == 0){ + uLCD.printf("Secs\n"); + } else if(modifying == 1){ + uLCD.printf("Mins\n"); + } else if(modifying == 2){ + uLCD.printf("Hours\n"); + } + uLCD.printf("Press 1 to set the timer to the current value.\n"); + if(blue.getc()=='!'){ + if(blue.getc()=='B'){ + bnum = blue.getc();//button number + bhit = blue.getc();//1=hit, 0=release + if(blue.getc()==char(~('!' + 'B' + bnum + bhit))){//checksum + switch(bnum){ + case '1'://number button 1 + if(bhit == '1'){ + done = true; + } + break; + case '5'://up arrow + if(bhit=='1'){ + time[modifying]++; + } + break; + case '6'://down arrow + if(bhit=='1'&&time[modifying]>0){ + time[modifying]--; + } + break; + case '7'://left arrow + if(bhit=='1'&&modifying>0){ + modifying--; + } + break; + case '8'://right arrow + if(bhit=='1'&&modifying<2){ + modifying++; + } + break; + } + } + } + } + } + return time[0] + time[1] * 60 + time[2] * 60 * 60; + +} + +int main() { + lights = 0; + uLCD.printf("LIGHT_ALARM V1.0 Donn Green\n\n"); + uLCD.printf("Press Button 1 to begin light activation mode\n"); + uLCD.printf("Press Button 2 to begin timer activation mode\n"); + pb1.mode(PullDown); + pb2.mode(PullDown); + lights.period(1.0f/25000.0f); + while(!(pb1||pb2)){ + //do nothing until a button is pressed + } + if(pb1){ + lightMode(); + } + else if(pb2){ + int time = getTime(); + timerMode(time); + } +}