S D
/
Clocky
The Alarm Clock that runs away from you when you try to switch it off !
main.cpp@0:c5d9aa9ab648, 2013-10-17 (annotated)
- Committer:
- sdesai49
- Date:
- Thu Oct 17 09:37:05 2013 +0000
- Revision:
- 0:c5d9aa9ab648
rev 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sdesai49 | 0:c5d9aa9ab648 | 1 | //Header/Library Inclusions : Mbed, Speaker, NokiaLCD. Links Below |
sdesai49 | 0:c5d9aa9ab648 | 2 | //http://mbed.org/users/4180_1/notebook/using-a-speaker-for-audio-output/// |
sdesai49 | 0:c5d9aa9ab648 | 3 | |
sdesai49 | 0:c5d9aa9ab648 | 4 | #include "mbed.h" |
sdesai49 | 0:c5d9aa9ab648 | 5 | #include "NokiaLCD.h" |
sdesai49 | 0:c5d9aa9ab648 | 6 | #include "Speaker.h" |
sdesai49 | 0:c5d9aa9ab648 | 7 | |
sdesai49 | 0:c5d9aa9ab648 | 8 | NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type |
sdesai49 | 0:c5d9aa9ab648 | 9 | DigitalIn set(p19); // push button for setting the timer |
sdesai49 | 0:c5d9aa9ab648 | 10 | DigitalIn reset(p20); // push button for reseting the timer |
sdesai49 | 0:c5d9aa9ab648 | 11 | DigitalIn incr(p21); // push button for incrementing hour/min set |
sdesai49 | 0:c5d9aa9ab648 | 12 | DigitalIn decr(p22); // push button for decrementing hour/min set |
sdesai49 | 0:c5d9aa9ab648 | 13 | DigitalIn alarm_stop(p30); |
sdesai49 | 0:c5d9aa9ab648 | 14 | DigitalOut myled1(LED3); // LEDs for testing sensor data reception |
sdesai49 | 0:c5d9aa9ab648 | 15 | DigitalOut myled2(LED4); |
sdesai49 | 0:c5d9aa9ab648 | 16 | AnalogIn dis(p18); // Analog input for sonar sensor |
sdesai49 | 0:c5d9aa9ab648 | 17 | DigitalOut fw1(p10); //Forward Motor 1 |
sdesai49 | 0:c5d9aa9ab648 | 18 | DigitalOut rev1(p11); //Reverse Motor 1 |
sdesai49 | 0:c5d9aa9ab648 | 19 | DigitalOut fw2(p13); //Forward Motor 2 |
sdesai49 | 0:c5d9aa9ab648 | 20 | DigitalOut rev2(p14); //Reverse Motor 2 |
sdesai49 | 0:c5d9aa9ab648 | 21 | DigitalOut pwm(p24); //Can be kept as PwmOut if speed control desired |
sdesai49 | 0:c5d9aa9ab648 | 22 | DigitalOut led1(LED1); |
sdesai49 | 0:c5d9aa9ab648 | 23 | DigitalOut led2(LED2); |
sdesai49 | 0:c5d9aa9ab648 | 24 | |
sdesai49 | 0:c5d9aa9ab648 | 25 | int main() { |
sdesai49 | 0:c5d9aa9ab648 | 26 | set_time(1379615410); // real time clock set |
sdesai49 | 0:c5d9aa9ab648 | 27 | Speaker mySpeaker(p26); |
sdesai49 | 0:c5d9aa9ab648 | 28 | lcd.cls(); |
sdesai49 | 0:c5d9aa9ab648 | 29 | lcd.background(0x0000FF); // Background of blue color |
sdesai49 | 0:c5d9aa9ab648 | 30 | int alarm_minute=0; // integer for storing alarm minutes set |
sdesai49 | 0:c5d9aa9ab648 | 31 | int alarm_hour=0; // integer for storing alarm hour set |
sdesai49 | 0:c5d9aa9ab648 | 32 | |
sdesai49 | 0:c5d9aa9ab648 | 33 | while(1){ |
sdesai49 | 0:c5d9aa9ab648 | 34 | |
sdesai49 | 0:c5d9aa9ab648 | 35 | time_t seconds = time(NULL); |
sdesai49 | 0:c5d9aa9ab648 | 36 | lcd.background(0x0000FF); |
sdesai49 | 0:c5d9aa9ab648 | 37 | lcd.locate(0,0); |
sdesai49 | 0:c5d9aa9ab648 | 38 | lcd.printf("Time : "); |
sdesai49 | 0:c5d9aa9ab648 | 39 | lcd.locate(3,2); |
sdesai49 | 0:c5d9aa9ab648 | 40 | char buffer[32]; // Buffer for storing Time |
sdesai49 | 0:c5d9aa9ab648 | 41 | strftime(buffer, 32, "%I:%M:%S", localtime(&seconds)); // http://www.cplusplus.com/reference/ctime/strftime/ |
sdesai49 | 0:c5d9aa9ab648 | 42 | lcd.printf("%s", buffer); |
sdesai49 | 0:c5d9aa9ab648 | 43 | wait(0.10); |
sdesai49 | 0:c5d9aa9ab648 | 44 | int i = (((buffer[0] - 48)*10) + (buffer[1]-48)); // Converting from Asci to Int |
sdesai49 | 0:c5d9aa9ab648 | 45 | int j = (((buffer[3] - 48)*10) + (buffer[4]-48)); |
sdesai49 | 0:c5d9aa9ab648 | 46 | |
sdesai49 | 0:c5d9aa9ab648 | 47 | lcd.locate(0,5); |
sdesai49 | 0:c5d9aa9ab648 | 48 | lcd.printf("Alarm Set for : "); |
sdesai49 | 0:c5d9aa9ab648 | 49 | lcd.locate(3,7); |
sdesai49 | 0:c5d9aa9ab648 | 50 | lcd.printf("%d : %d",alarm_hour,alarm_minute); |
sdesai49 | 0:c5d9aa9ab648 | 51 | if((i == alarm_hour) && (j == alarm_minute)) // When the real time hour/ min match the alarm set |
sdesai49 | 0:c5d9aa9ab648 | 52 | { |
sdesai49 | 0:c5d9aa9ab648 | 53 | while(1) |
sdesai49 | 0:c5d9aa9ab648 | 54 | { |
sdesai49 | 0:c5d9aa9ab648 | 55 | |
sdesai49 | 0:c5d9aa9ab648 | 56 | mySpeaker.PlayNote(969.0,0.5,0.3); // Speaker with police siren playnote( frequency, duration,volume) |
sdesai49 | 0:c5d9aa9ab648 | 57 | mySpeaker.PlayNote(800.0,0.5,0.3); // http://mbed.org/users/4180_1/notebook/using-a-speaker-for-audio-output/ |
sdesai49 | 0:c5d9aa9ab648 | 58 | //Motor |
sdesai49 | 0:c5d9aa9ab648 | 59 | int per; |
sdesai49 | 0:c5d9aa9ab648 | 60 | per=dis*512/3.3; |
sdesai49 | 0:c5d9aa9ab648 | 61 | if(per<8) |
sdesai49 | 0:c5d9aa9ab648 | 62 | { |
sdesai49 | 0:c5d9aa9ab648 | 63 | led1=1; |
sdesai49 | 0:c5d9aa9ab648 | 64 | led2=0; |
sdesai49 | 0:c5d9aa9ab648 | 65 | pwm=1; |
sdesai49 | 0:c5d9aa9ab648 | 66 | fw1=0; |
sdesai49 | 0:c5d9aa9ab648 | 67 | rev1=1; |
sdesai49 | 0:c5d9aa9ab648 | 68 | fw2=0; |
sdesai49 | 0:c5d9aa9ab648 | 69 | rev2=1; |
sdesai49 | 0:c5d9aa9ab648 | 70 | } |
sdesai49 | 0:c5d9aa9ab648 | 71 | |
sdesai49 | 0:c5d9aa9ab648 | 72 | else |
sdesai49 | 0:c5d9aa9ab648 | 73 | { |
sdesai49 | 0:c5d9aa9ab648 | 74 | led1=1; |
sdesai49 | 0:c5d9aa9ab648 | 75 | led2=1; |
sdesai49 | 0:c5d9aa9ab648 | 76 | pwm=0; |
sdesai49 | 0:c5d9aa9ab648 | 77 | } |
sdesai49 | 0:c5d9aa9ab648 | 78 | |
sdesai49 | 0:c5d9aa9ab648 | 79 | //motor code end |
sdesai49 | 0:c5d9aa9ab648 | 80 | |
sdesai49 | 0:c5d9aa9ab648 | 81 | if(alarm_stop == 1) |
sdesai49 | 0:c5d9aa9ab648 | 82 | { |
sdesai49 | 0:c5d9aa9ab648 | 83 | alarm_minute--; |
sdesai49 | 0:c5d9aa9ab648 | 84 | break; |
sdesai49 | 0:c5d9aa9ab648 | 85 | } |
sdesai49 | 0:c5d9aa9ab648 | 86 | } |
sdesai49 | 0:c5d9aa9ab648 | 87 | } |
sdesai49 | 0:c5d9aa9ab648 | 88 | if(reset) |
sdesai49 | 0:c5d9aa9ab648 | 89 | { |
sdesai49 | 0:c5d9aa9ab648 | 90 | int count=0; |
sdesai49 | 0:c5d9aa9ab648 | 91 | while(count!=3) |
sdesai49 | 0:c5d9aa9ab648 | 92 | { |
sdesai49 | 0:c5d9aa9ab648 | 93 | time_t seconds = time(NULL); |
sdesai49 | 0:c5d9aa9ab648 | 94 | lcd.locate(0,0); |
sdesai49 | 0:c5d9aa9ab648 | 95 | lcd.printf("Time : "); |
sdesai49 | 0:c5d9aa9ab648 | 96 | lcd.locate(3,2); |
sdesai49 | 0:c5d9aa9ab648 | 97 | char buffer[32]; |
sdesai49 | 0:c5d9aa9ab648 | 98 | strftime(buffer, 32, "%I:%M:%S", localtime(&seconds)); |
sdesai49 | 0:c5d9aa9ab648 | 99 | lcd.printf("%s", buffer); |
sdesai49 | 0:c5d9aa9ab648 | 100 | |
sdesai49 | 0:c5d9aa9ab648 | 101 | if(count == 2) |
sdesai49 | 0:c5d9aa9ab648 | 102 | { |
sdesai49 | 0:c5d9aa9ab648 | 103 | |
sdesai49 | 0:c5d9aa9ab648 | 104 | lcd.locate(0,8); |
sdesai49 | 0:c5d9aa9ab648 | 105 | lcd.printf("Alarm Set to -> "); |
sdesai49 | 0:c5d9aa9ab648 | 106 | lcd.locate(3,10); |
sdesai49 | 0:c5d9aa9ab648 | 107 | lcd.printf("%02d : %02d ",alarm_hour,alarm_minute); |
sdesai49 | 0:c5d9aa9ab648 | 108 | lcd.locate(0,13); |
sdesai49 | 0:c5d9aa9ab648 | 109 | lcd.printf("Press Set !"); |
sdesai49 | 0:c5d9aa9ab648 | 110 | } |
sdesai49 | 0:c5d9aa9ab648 | 111 | if(count == 1) |
sdesai49 | 0:c5d9aa9ab648 | 112 | { |
sdesai49 | 0:c5d9aa9ab648 | 113 | lcd.locate(0,8); |
sdesai49 | 0:c5d9aa9ab648 | 114 | |
sdesai49 | 0:c5d9aa9ab648 | 115 | //strftime(alarm, 2, "%I:%M:%S %p %F\n",); |
sdesai49 | 0:c5d9aa9ab648 | 116 | lcd.printf("Selected Hour:" ); |
sdesai49 | 0:c5d9aa9ab648 | 117 | lcd.locate(3,10); |
sdesai49 | 0:c5d9aa9ab648 | 118 | lcd.printf("%02d",alarm_hour ); |
sdesai49 | 0:c5d9aa9ab648 | 119 | |
sdesai49 | 0:c5d9aa9ab648 | 120 | |
sdesai49 | 0:c5d9aa9ab648 | 121 | lcd.locate(0,13); |
sdesai49 | 0:c5d9aa9ab648 | 122 | |
sdesai49 | 0:c5d9aa9ab648 | 123 | //strftime(alarm, 2, "%I:%M:%S %p %F\n",); |
sdesai49 | 0:c5d9aa9ab648 | 124 | lcd.printf("Select Minute ",alarm_minute ); |
sdesai49 | 0:c5d9aa9ab648 | 125 | lcd.locate(3,15); |
sdesai49 | 0:c5d9aa9ab648 | 126 | lcd.printf("%02d",alarm_minute ); |
sdesai49 | 0:c5d9aa9ab648 | 127 | //wait(1); |
sdesai49 | 0:c5d9aa9ab648 | 128 | //lcd.cls(); |
sdesai49 | 0:c5d9aa9ab648 | 129 | } |
sdesai49 | 0:c5d9aa9ab648 | 130 | if(incr && count == 1) |
sdesai49 | 0:c5d9aa9ab648 | 131 | { |
sdesai49 | 0:c5d9aa9ab648 | 132 | alarm_minute++; |
sdesai49 | 0:c5d9aa9ab648 | 133 | wait(0.25); |
sdesai49 | 0:c5d9aa9ab648 | 134 | } |
sdesai49 | 0:c5d9aa9ab648 | 135 | if(incr && count == 0) |
sdesai49 | 0:c5d9aa9ab648 | 136 | { |
sdesai49 | 0:c5d9aa9ab648 | 137 | alarm_hour++; |
sdesai49 | 0:c5d9aa9ab648 | 138 | wait(0.25); |
sdesai49 | 0:c5d9aa9ab648 | 139 | } |
sdesai49 | 0:c5d9aa9ab648 | 140 | if(alarm_hour==25) |
sdesai49 | 0:c5d9aa9ab648 | 141 | { |
sdesai49 | 0:c5d9aa9ab648 | 142 | alarm_hour=0; |
sdesai49 | 0:c5d9aa9ab648 | 143 | } |
sdesai49 | 0:c5d9aa9ab648 | 144 | if(alarm_minute==60) |
sdesai49 | 0:c5d9aa9ab648 | 145 | { |
sdesai49 | 0:c5d9aa9ab648 | 146 | alarm_minute=0; |
sdesai49 | 0:c5d9aa9ab648 | 147 | } |
sdesai49 | 0:c5d9aa9ab648 | 148 | if(decr && count == 1) |
sdesai49 | 0:c5d9aa9ab648 | 149 | { |
sdesai49 | 0:c5d9aa9ab648 | 150 | alarm_minute--; |
sdesai49 | 0:c5d9aa9ab648 | 151 | wait(0.25); |
sdesai49 | 0:c5d9aa9ab648 | 152 | } |
sdesai49 | 0:c5d9aa9ab648 | 153 | if(alarm_minute==(-1)) |
sdesai49 | 0:c5d9aa9ab648 | 154 | { |
sdesai49 | 0:c5d9aa9ab648 | 155 | alarm_minute=59; |
sdesai49 | 0:c5d9aa9ab648 | 156 | } |
sdesai49 | 0:c5d9aa9ab648 | 157 | if(decr && count == 0) |
sdesai49 | 0:c5d9aa9ab648 | 158 | { |
sdesai49 | 0:c5d9aa9ab648 | 159 | alarm_hour--; |
sdesai49 | 0:c5d9aa9ab648 | 160 | wait(0.25); |
sdesai49 | 0:c5d9aa9ab648 | 161 | } |
sdesai49 | 0:c5d9aa9ab648 | 162 | if(alarm_hour==(-1)) |
sdesai49 | 0:c5d9aa9ab648 | 163 | { |
sdesai49 | 0:c5d9aa9ab648 | 164 | alarm_hour=24; |
sdesai49 | 0:c5d9aa9ab648 | 165 | } |
sdesai49 | 0:c5d9aa9ab648 | 166 | |
sdesai49 | 0:c5d9aa9ab648 | 167 | if(set) |
sdesai49 | 0:c5d9aa9ab648 | 168 | { |
sdesai49 | 0:c5d9aa9ab648 | 169 | count = count + 1; |
sdesai49 | 0:c5d9aa9ab648 | 170 | wait(0.25); |
sdesai49 | 0:c5d9aa9ab648 | 171 | lcd.cls(); |
sdesai49 | 0:c5d9aa9ab648 | 172 | } |
sdesai49 | 0:c5d9aa9ab648 | 173 | if(count == 0) |
sdesai49 | 0:c5d9aa9ab648 | 174 | { |
sdesai49 | 0:c5d9aa9ab648 | 175 | |
sdesai49 | 0:c5d9aa9ab648 | 176 | lcd.locate(0,8); |
sdesai49 | 0:c5d9aa9ab648 | 177 | |
sdesai49 | 0:c5d9aa9ab648 | 178 | //strftime(alarm, 2, "%I:%M:%S %p %F\n",); |
sdesai49 | 0:c5d9aa9ab648 | 179 | lcd.printf("Select Hour:" ); |
sdesai49 | 0:c5d9aa9ab648 | 180 | lcd.locate(3,10); |
sdesai49 | 0:c5d9aa9ab648 | 181 | lcd.printf("%02d",alarm_hour ); |
sdesai49 | 0:c5d9aa9ab648 | 182 | |
sdesai49 | 0:c5d9aa9ab648 | 183 | //wait(1); |
sdesai49 | 0:c5d9aa9ab648 | 184 | //lcd.cls(); |
sdesai49 | 0:c5d9aa9ab648 | 185 | |
sdesai49 | 0:c5d9aa9ab648 | 186 | } |
sdesai49 | 0:c5d9aa9ab648 | 187 | |
sdesai49 | 0:c5d9aa9ab648 | 188 | } |
sdesai49 | 0:c5d9aa9ab648 | 189 | } |
sdesai49 | 0:c5d9aa9ab648 | 190 | |
sdesai49 | 0:c5d9aa9ab648 | 191 | } |
sdesai49 | 0:c5d9aa9ab648 | 192 | } |