Team Scream Machine / Mbed 2 deprecated aclock

Dependencies:   MaxSonar RTC-DS1307 TextLCD mbed

Committer:
SausageSausage
Date:
Thu May 25 14:43:55 2017 +0000
Revision:
2:d3a3a15016f3
Parent:
1:aa2b8929a968
Child:
3:89dae25e597b
The button recognises holds (for date display) and double click (for 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 2:d3a3a15016f3 4 #include "MaxSonar.h"
SausageSausage 0:514ef400f75b 5
SausageSausage 0:514ef400f75b 6 Rtc_Ds1307 rtc(PTE0, PTE1);
SausageSausage 2:d3a3a15016f3 7 DigitalOut red(LED1);
SausageSausage 1:aa2b8929a968 8 TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // rs, e, d4-d7
SausageSausage 2:d3a3a15016f3 9 DigitalIn pin(PTE29); //button
SausageSausage 0:514ef400f75b 10 Serial pc(USBTX, USBRX);
SausageSausage 1:aa2b8929a968 11 Rtc_Ds1307::Time_rtc tim = {};
SausageSausage 2:d3a3a15016f3 12 Timer t;
SausageSausage 1:aa2b8929a968 13
SausageSausage 1:aa2b8929a968 14 void displayTime();
SausageSausage 0:514ef400f75b 15
SausageSausage 0:514ef400f75b 16 int main() {
SausageSausage 0:514ef400f75b 17
SausageSausage 2:d3a3a15016f3 18 Ticker cloo; //declare a ticker to update clock every sec
SausageSausage 2:d3a3a15016f3 19 cloo.attach(&displayTime, 1); //the ticker runs the function that wipes the screen and displays the updated time
SausageSausage 2:d3a3a15016f3 20
SausageSausage 2:d3a3a15016f3 21 rtc.startClock();
SausageSausage 1:aa2b8929a968 22
SausageSausage 2:d3a3a15016f3 23 MaxSonar *range;
SausageSausage 2:d3a3a15016f3 24 float r;
SausageSausage 2:d3a3a15016f3 25
SausageSausage 2:d3a3a15016f3 26 range = new MaxSonar(MS_LV, MS_ANALOG, PTE23, PTC2);
SausageSausage 2:d3a3a15016f3 27 range->setVoltage(5);
SausageSausage 2:d3a3a15016f3 28 range->setUnits(MS_CM);
SausageSausage 2:d3a3a15016f3 29
SausageSausage 2:d3a3a15016f3 30 range->triggerRead();
SausageSausage 2:d3a3a15016f3 31 wait_ms(49);
SausageSausage 2:d3a3a15016f3 32 r = range->read();
SausageSausage 0:514ef400f75b 33
SausageSausage 1:aa2b8929a968 34 while(1){
SausageSausage 2:d3a3a15016f3 35
SausageSausage 2:d3a3a15016f3 36 wait_ms(50); //wait so button states do not overlap
SausageSausage 2:d3a3a15016f3 37
SausageSausage 2:d3a3a15016f3 38 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 39
SausageSausage 2:d3a3a15016f3 40 cloo.detach(); //stop the ticker while performing button operations
SausageSausage 2:d3a3a15016f3 41
SausageSausage 2:d3a3a15016f3 42 t.reset();
SausageSausage 2:d3a3a15016f3 43 t.start(); //start timer
SausageSausage 2:d3a3a15016f3 44
SausageSausage 2:d3a3a15016f3 45 while(t.read() < 1){ //if it's not unpressed in a second - HOLD case
SausageSausage 2:d3a3a15016f3 46
SausageSausage 2:d3a3a15016f3 47 if(!pin.read()){ //if it goes low, check for double click
SausageSausage 2:d3a3a15016f3 48
SausageSausage 2:d3a3a15016f3 49 t.reset();
SausageSausage 2:d3a3a15016f3 50
SausageSausage 2:d3a3a15016f3 51 while(t.read() < 1){ //listen for 1 sec for a second click
SausageSausage 2:d3a3a15016f3 52
SausageSausage 2:d3a3a15016f3 53 if(pin.read()){ //if x = 1 execute DOUBLE CLICK - set alarm
SausageSausage 2:d3a3a15016f3 54 lcd.cls();
SausageSausage 2:d3a3a15016f3 55 lcd.printf("settin' alarm!");
SausageSausage 2:d3a3a15016f3 56 wait(2);
SausageSausage 2:d3a3a15016f3 57 break;
SausageSausage 2:d3a3a15016f3 58 }
SausageSausage 2:d3a3a15016f3 59 }
SausageSausage 2:d3a3a15016f3 60 break;
SausageSausage 2:d3a3a15016f3 61 }
SausageSausage 1:aa2b8929a968 62 }
SausageSausage 2:d3a3a15016f3 63
SausageSausage 2:d3a3a15016f3 64
SausageSausage 2:d3a3a15016f3 65
SausageSausage 2:d3a3a15016f3 66 while(pin.read()){ //still pressed? Execute Button HOLD case, exit hold when no longer held
SausageSausage 2:d3a3a15016f3 67
SausageSausage 2:d3a3a15016f3 68 rtc.getTime(tim);
SausageSausage 2:d3a3a15016f3 69
SausageSausage 2:d3a3a15016f3 70 lcd.cls();
SausageSausage 2:d3a3a15016f3 71 lcd.printf("Today is the :\n%02d/%02d/%02d", tim.date, tim.mon, tim.year); //display date
SausageSausage 2:d3a3a15016f3 72 wait(1);
SausageSausage 2:d3a3a15016f3 73
SausageSausage 2:d3a3a15016f3 74 }
SausageSausage 2:d3a3a15016f3 75
SausageSausage 2:d3a3a15016f3 76 cloo.attach(&displayTime, 1); //re-enable ticker after date release
SausageSausage 2:d3a3a15016f3 77
SausageSausage 2:d3a3a15016f3 78 }
SausageSausage 2:d3a3a15016f3 79
SausageSausage 2:d3a3a15016f3 80 t.stop();
SausageSausage 2:d3a3a15016f3 81
SausageSausage 2:d3a3a15016f3 82 }
SausageSausage 2:d3a3a15016f3 83
SausageSausage 1:aa2b8929a968 84 }
SausageSausage 1:aa2b8929a968 85
SausageSausage 2:d3a3a15016f3 86 void displayTime(){ //get the time from the rtc chip and display it on the LCD
SausageSausage 1:aa2b8929a968 87
SausageSausage 1:aa2b8929a968 88 Rtc_Ds1307::Time_rtc tm = tim;
SausageSausage 1:aa2b8929a968 89
SausageSausage 1:aa2b8929a968 90 if (rtc.getTime(tm) ) {
SausageSausage 1:aa2b8929a968 91 lcd.cls();
SausageSausage 0:514ef400f75b 92 lcd.printf("The time is :\n%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
SausageSausage 0:514ef400f75b 93 }
SausageSausage 2:d3a3a15016f3 94 red = !red;
SausageSausage 1:aa2b8929a968 95 }