Team Scream Machine / Mbed 2 deprecated aclock

Dependencies:   MaxSonar RTC-DS1307 TextLCD mbed

Committer:
SausageSausage
Date:
Fri May 26 08:50:44 2017 +0000
Revision:
3:89dae25e597b
Parent:
2:d3a3a15016f3
Child:
4:f7b32fcc75f8
Hopefully working version with a shitty text alarm

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