Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MaxSonar RTC-DS1307 TextLCD mbed
main.cpp@2:d3a3a15016f3, 2017-05-25 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |