Team Scream Machine / Mbed 2 deprecated aclock

Dependencies:   MaxSonar RTC-DS1307 TextLCD mbed

Committer:
SausageSausage
Date:
Fri May 26 09:27:22 2017 +0000
Revision:
4:f7b32fcc75f8
Parent:
3:89dae25e597b
Child:
5:518dd1a21359
Final product with an alarm that boops

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SausageSausage 0:514ef400f75b 1 #include "mbed.h"
SausageSausage 0:514ef400f75b 2 #include "TextLCD.h"
SausageSausage 0:514ef400f75b 3 #include "Rtc_Ds1307.h"
SausageSausage 0:514ef400f75b 4
SausageSausage 0:514ef400f75b 5 Rtc_Ds1307 rtc(PTE0, PTE1);
SausageSausage 2:d3a3a15016f3 6 DigitalOut red(LED1);
SausageSausage 1:aa2b8929a968 7 TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // rs, e, d4-d7
SausageSausage 2:d3a3a15016f3 8 DigitalIn pin(PTE29); //button
SausageSausage 0:514ef400f75b 9 Serial pc(USBTX, USBRX);
SausageSausage 1:aa2b8929a968 10 Rtc_Ds1307::Time_rtc tim = {};
SausageSausage 4:f7b32fcc75f8 11 PwmOut boop(PTD4); //alarm buzzer
SausageSausage 2:d3a3a15016f3 12 Timer t;
SausageSausage 1:aa2b8929a968 13
SausageSausage 1:aa2b8929a968 14 void displayTime();
SausageSausage 3:89dae25e597b 15 int setAlrm(bool ho);
SausageSausage 3:89dae25e597b 16 bool hitIt(int hor, int min, Rtc_Ds1307::Time_rtc teim);
SausageSausage 3:89dae25e597b 17
SausageSausage 3:89dae25e597b 18 int Halrm = -1;
SausageSausage 3:89dae25e597b 19 int Malrm = 0;
SausageSausage 3:89dae25e597b 20
SausageSausage 0:514ef400f75b 21
SausageSausage 0:514ef400f75b 22 int main() {
SausageSausage 0:514ef400f75b 23
SausageSausage 4:f7b32fcc75f8 24 boop.write(0); //initialise buzzer
SausageSausage 4:f7b32fcc75f8 25 boop.period(5);
SausageSausage 4:f7b32fcc75f8 26
SausageSausage 2:d3a3a15016f3 27 Ticker cloo; //declare a ticker to update clock every sec
SausageSausage 2:d3a3a15016f3 28 cloo.attach(&displayTime, 1); //the ticker runs the function that wipes the screen and displays the updated time
SausageSausage 2:d3a3a15016f3 29
SausageSausage 2:d3a3a15016f3 30 rtc.startClock();
SausageSausage 1:aa2b8929a968 31
SausageSausage 1:aa2b8929a968 32 while(1){
SausageSausage 2:d3a3a15016f3 33
SausageSausage 2:d3a3a15016f3 34 wait_ms(50); //wait so button states do not overlap
SausageSausage 2:d3a3a15016f3 35
SausageSausage 2:d3a3a15016f3 36 if(pin.read()){ //once it's 1 start the detection loop to decide whether this is a hold or a double click
SausageSausage 2:d3a3a15016f3 37
SausageSausage 2:d3a3a15016f3 38 cloo.detach(); //stop the ticker while performing button operations
SausageSausage 2:d3a3a15016f3 39
SausageSausage 2:d3a3a15016f3 40 t.reset();
SausageSausage 2:d3a3a15016f3 41 t.start(); //start timer
SausageSausage 2:d3a3a15016f3 42
SausageSausage 2:d3a3a15016f3 43 while(t.read() < 1){ //if it's not unpressed in a second - HOLD case
SausageSausage 2:d3a3a15016f3 44
SausageSausage 2:d3a3a15016f3 45 if(!pin.read()){ //if it goes low, check for double click
SausageSausage 2:d3a3a15016f3 46
SausageSausage 2:d3a3a15016f3 47 t.reset();
SausageSausage 2:d3a3a15016f3 48
SausageSausage 2:d3a3a15016f3 49 while(t.read() < 1){ //listen for 1 sec for a second click
SausageSausage 2:d3a3a15016f3 50
SausageSausage 2:d3a3a15016f3 51 if(pin.read()){ //if x = 1 execute DOUBLE CLICK - set alarm
SausageSausage 2:d3a3a15016f3 52 lcd.cls();
SausageSausage 2:d3a3a15016f3 53 lcd.printf("settin' alarm!");
SausageSausage 2:d3a3a15016f3 54 wait(2);
SausageSausage 3:89dae25e597b 55
SausageSausage 3:89dae25e597b 56 Halrm = setAlrm(true);
SausageSausage 3:89dae25e597b 57 if(Halrm >= 0){
SausageSausage 3:89dae25e597b 58 Malrm = setAlrm(false);
SausageSausage 3:89dae25e597b 59 lcd.cls();
SausageSausage 3:89dae25e597b 60 lcd.printf("Alarm: %d:%d", Halrm,Malrm);
SausageSausage 3:89dae25e597b 61 wait(2);
SausageSausage 3:89dae25e597b 62 }
SausageSausage 2:d3a3a15016f3 63 break;
SausageSausage 2:d3a3a15016f3 64 }
SausageSausage 2:d3a3a15016f3 65 }
SausageSausage 2:d3a3a15016f3 66 break;
SausageSausage 2:d3a3a15016f3 67 }
SausageSausage 1:aa2b8929a968 68 }
SausageSausage 2:d3a3a15016f3 69
SausageSausage 2:d3a3a15016f3 70
SausageSausage 2:d3a3a15016f3 71
SausageSausage 2:d3a3a15016f3 72 while(pin.read()){ //still pressed? Execute Button HOLD case, exit hold when no longer held
SausageSausage 2:d3a3a15016f3 73
SausageSausage 2:d3a3a15016f3 74 rtc.getTime(tim);
SausageSausage 2:d3a3a15016f3 75
SausageSausage 2:d3a3a15016f3 76 lcd.cls();
SausageSausage 2:d3a3a15016f3 77 lcd.printf("Today is the :\n%02d/%02d/%02d", tim.date, tim.mon, tim.year); //display date
SausageSausage 2:d3a3a15016f3 78 wait(1);
SausageSausage 2:d3a3a15016f3 79
SausageSausage 2:d3a3a15016f3 80 }
SausageSausage 2:d3a3a15016f3 81
SausageSausage 2:d3a3a15016f3 82 cloo.attach(&displayTime, 1); //re-enable ticker after date release
SausageSausage 2:d3a3a15016f3 83
SausageSausage 2:d3a3a15016f3 84 }
SausageSausage 2:d3a3a15016f3 85
SausageSausage 2:d3a3a15016f3 86 t.stop();
SausageSausage 2:d3a3a15016f3 87
SausageSausage 2:d3a3a15016f3 88 }
SausageSausage 2:d3a3a15016f3 89
SausageSausage 1:aa2b8929a968 90 }
SausageSausage 1:aa2b8929a968 91
SausageSausage 2:d3a3a15016f3 92 void displayTime(){ //get the time from the rtc chip and display it on the LCD
SausageSausage 1:aa2b8929a968 93
SausageSausage 1:aa2b8929a968 94 Rtc_Ds1307::Time_rtc tm = tim;
SausageSausage 1:aa2b8929a968 95
SausageSausage 1:aa2b8929a968 96 if (rtc.getTime(tm) ) {
SausageSausage 1:aa2b8929a968 97 lcd.cls();
SausageSausage 3:89dae25e597b 98 lcd.printf("The time is :\n%02d:%02d:%02d", tm.hour, tm.min, tm.sec); //display time
SausageSausage 3:89dae25e597b 99
SausageSausage 4:f7b32fcc75f8 100 if(hitIt(Halrm, Malrm, tm)){ //check if the time is right for alarmage
SausageSausage 4:f7b32fcc75f8 101 boop.write(0.5);
SausageSausage 4:f7b32fcc75f8 102 while(!pin.read()){
SausageSausage 4:f7b32fcc75f8 103 lcd.cls();
SausageSausage 4:f7b32fcc75f8 104 lcd.printf("You should be alarmed");
SausageSausage 4:f7b32fcc75f8 105 wait(0.2);
SausageSausage 4:f7b32fcc75f8 106 }
SausageSausage 4:f7b32fcc75f8 107 boop.write(0);
SausageSausage 0:514ef400f75b 108 }
SausageSausage 3:89dae25e597b 109
SausageSausage 3:89dae25e597b 110 }
SausageSausage 2:d3a3a15016f3 111 red = !red;
SausageSausage 3:89dae25e597b 112 }
SausageSausage 3:89dae25e597b 113
SausageSausage 3:89dae25e597b 114 int setAlrm(bool ho){
SausageSausage 3:89dae25e597b 115
SausageSausage 3:89dae25e597b 116 int mod;
SausageSausage 3:89dae25e597b 117 float spd;
SausageSausage 3:89dae25e597b 118 if(ho){
SausageSausage 3:89dae25e597b 119 mod = 24;
SausageSausage 3:89dae25e597b 120 spd = 0.5;
SausageSausage 3:89dae25e597b 121 }else{
SausageSausage 3:89dae25e597b 122 mod = 60;
SausageSausage 3:89dae25e597b 123 spd = 0.25;
SausageSausage 3:89dae25e597b 124 }
SausageSausage 3:89dae25e597b 125
SausageSausage 3:89dae25e597b 126 int homin = 0;
SausageSausage 3:89dae25e597b 127 bool sat = false;
SausageSausage 3:89dae25e597b 128 bool DC = false;
SausageSausage 3:89dae25e597b 129
SausageSausage 3:89dae25e597b 130 while(!sat){
SausageSausage 3:89dae25e597b 131
SausageSausage 3:89dae25e597b 132 while(!pin.read() && !sat){
SausageSausage 3:89dae25e597b 133
SausageSausage 3:89dae25e597b 134 lcd.cls();
SausageSausage 3:89dae25e597b 135 if(ho) lcd.printf("Hour: %02d\nDC to confirm", homin);
SausageSausage 3:89dae25e597b 136 else lcd.printf("Minutes: %02d\nDC to confirm", homin);
SausageSausage 3:89dae25e597b 137
SausageSausage 3:89dae25e597b 138 wait(0.2);
SausageSausage 3:89dae25e597b 139 if(pin.read()){ //once it's 1 start the detection loop to decide whether this is a hold or a double click
SausageSausage 3:89dae25e597b 140
SausageSausage 3:89dae25e597b 141 t.reset();
SausageSausage 3:89dae25e597b 142 t.start(); //start timer
SausageSausage 3:89dae25e597b 143
SausageSausage 3:89dae25e597b 144 while(t.read() < 1){ //if it's not unpressed in a second - HOLD case
SausageSausage 3:89dae25e597b 145
SausageSausage 3:89dae25e597b 146 if(!pin.read()){ //if it goes low, check for double click
SausageSausage 3:89dae25e597b 147
SausageSausage 3:89dae25e597b 148 t.reset();
SausageSausage 3:89dae25e597b 149
SausageSausage 3:89dae25e597b 150 while(t.read() < 1){ //listen for 1 sec for a second click
SausageSausage 3:89dae25e597b 151
SausageSausage 3:89dae25e597b 152 if(pin.read()){ //if x = 1 execute DOUBLE CLICK - confirm selection
SausageSausage 3:89dae25e597b 153 lcd.cls();
SausageSausage 3:89dae25e597b 154 if(ho) lcd.printf("Hour: %02d\nSet!", homin);
SausageSausage 3:89dae25e597b 155 else lcd.printf("Minutes: %02d\nSet!", homin);
SausageSausage 3:89dae25e597b 156 sat = true;
SausageSausage 3:89dae25e597b 157 DC = true;
SausageSausage 3:89dae25e597b 158 wait(2);
SausageSausage 3:89dae25e597b 159 break;
SausageSausage 3:89dae25e597b 160 }
SausageSausage 3:89dae25e597b 161 }
SausageSausage 3:89dae25e597b 162 break;
SausageSausage 3:89dae25e597b 163 }
SausageSausage 3:89dae25e597b 164 }
SausageSausage 3:89dae25e597b 165 if(!pin.read() && !DC){ //if unpressed - single click detected - cancel alarm
SausageSausage 3:89dae25e597b 166 lcd.cls();
SausageSausage 3:89dae25e597b 167 lcd.printf("Alarm Canceled!");
SausageSausage 3:89dae25e597b 168 homin = -1;
SausageSausage 3:89dae25e597b 169 return homin;
SausageSausage 3:89dae25e597b 170 }
SausageSausage 3:89dae25e597b 171
SausageSausage 3:89dae25e597b 172 while(pin.read()){ //still pressed? Execute Button HOLD case, exit hold when no longer held
SausageSausage 3:89dae25e597b 173
SausageSausage 4:f7b32fcc75f8 174 homin = (homin + 1)%mod; //increment the value while the button is held
SausageSausage 3:89dae25e597b 175 lcd.cls();
SausageSausage 3:89dae25e597b 176 if(ho) lcd.printf("Hour: %02d", homin);
SausageSausage 4:f7b32fcc75f8 177 else lcd.printf("Minutes: %02d", homin);
SausageSausage 3:89dae25e597b 178 wait(spd);
SausageSausage 3:89dae25e597b 179
SausageSausage 3:89dae25e597b 180 }
SausageSausage 3:89dae25e597b 181 }
SausageSausage 3:89dae25e597b 182 }
SausageSausage 3:89dae25e597b 183
SausageSausage 3:89dae25e597b 184 }
SausageSausage 3:89dae25e597b 185
SausageSausage 3:89dae25e597b 186 return homin;
SausageSausage 3:89dae25e597b 187 }
SausageSausage 3:89dae25e597b 188
SausageSausage 4:f7b32fcc75f8 189 //this function checks whether it's time to sound the alarms
SausageSausage 4:f7b32fcc75f8 190 //if the minute and the hour is the same as that of the alarm, return true
SausageSausage 3:89dae25e597b 191 bool hitIt(int hor, int min, Rtc_Ds1307::Time_rtc teim){
SausageSausage 3:89dae25e597b 192 int x = teim.hour - hor;
SausageSausage 3:89dae25e597b 193 if(x == 0){
SausageSausage 3:89dae25e597b 194 int y = teim.min - min;
SausageSausage 3:89dae25e597b 195 if(y == 0){
SausageSausage 3:89dae25e597b 196 return true;
SausageSausage 3:89dae25e597b 197 }
SausageSausage 3:89dae25e597b 198 }
SausageSausage 3:89dae25e597b 199 return false;
SausageSausage 3:89dae25e597b 200 }