The Alarm Clock that runs away from you when you try to switch it off !

Dependencies:   NokiaLCD mbed

Committer:
sdesai49
Date:
Thu Oct 17 09:37:05 2013 +0000
Revision:
0:c5d9aa9ab648
rev 1.0

Who changed what in which revision?

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