Configurable countdown timer

Dependencies:   mbed PinDetect TextLCD

Committer:
MarceloSalazar
Date:
Sat Jun 06 23:17:30 2020 +0000
Revision:
2:ecbc6a14824c
Parent:
1:0ed57c2fd528
Child:
3:3facd92a3f37
Count down implementation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarceloSalazar 0:95d8c08cb5d4 1 #include "mbed.h"
MarceloSalazar 1:0ed57c2fd528 2 #include "TextLCD.h"
MarceloSalazar 1:0ed57c2fd528 3
MarceloSalazar 0:95d8c08cb5d4 4 DigitalOut myled(LED1);
MarceloSalazar 1:0ed57c2fd528 5
MarceloSalazar 1:0ed57c2fd528 6 //TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
MarceloSalazar 1:0ed57c2fd528 7 // Note: VCC=5V, V0=0V, via 330 resistor)
MarceloSalazar 1:0ed57c2fd528 8 TextLCD lcd(p15, p16, p17, p18, p19, p20);
MarceloSalazar 1:0ed57c2fd528 9
MarceloSalazar 2:ecbc6a14824c 10 Ticker flipper;
MarceloSalazar 2:ecbc6a14824c 11
MarceloSalazar 2:ecbc6a14824c 12 volatile int t1s = 0;
MarceloSalazar 1:0ed57c2fd528 13
MarceloSalazar 2:ecbc6a14824c 14 volatile char seconds = 0;
MarceloSalazar 2:ecbc6a14824c 15 volatile char minutes = 25;
MarceloSalazar 2:ecbc6a14824c 16 volatile char hours = 0;
MarceloSalazar 2:ecbc6a14824c 17 volatile char alarm = 1; // alarm set on/off ==> enables buzzer
MarceloSalazar 0:95d8c08cb5d4 18
MarceloSalazar 2:ecbc6a14824c 19 void update_lcd() {
MarceloSalazar 1:0ed57c2fd528 20 lcd.locate (0,1);
MarceloSalazar 2:ecbc6a14824c 21 lcd.printf("%02d:%02d:%02d",hours, minutes, seconds);
MarceloSalazar 2:ecbc6a14824c 22 }
MarceloSalazar 2:ecbc6a14824c 23
MarceloSalazar 2:ecbc6a14824c 24 void flip() {
MarceloSalazar 2:ecbc6a14824c 25 t1s = 1;
MarceloSalazar 2:ecbc6a14824c 26 }
MarceloSalazar 2:ecbc6a14824c 27
MarceloSalazar 2:ecbc6a14824c 28 void count_down(){
MarceloSalazar 2:ecbc6a14824c 29
MarceloSalazar 2:ecbc6a14824c 30 if(seconds == 0 && minutes == 0 && hours == 0)
MarceloSalazar 2:ecbc6a14824c 31 return;
MarceloSalazar 2:ecbc6a14824c 32
MarceloSalazar 2:ecbc6a14824c 33 if(seconds != 0) {
MarceloSalazar 2:ecbc6a14824c 34 seconds -= 1;
MarceloSalazar 2:ecbc6a14824c 35 return;
MarceloSalazar 2:ecbc6a14824c 36 }
MarceloSalazar 2:ecbc6a14824c 37
MarceloSalazar 2:ecbc6a14824c 38 if(minutes != 0){
MarceloSalazar 2:ecbc6a14824c 39 minutes -= 1;
MarceloSalazar 2:ecbc6a14824c 40 seconds = 59;
MarceloSalazar 2:ecbc6a14824c 41 return;
MarceloSalazar 2:ecbc6a14824c 42 }
MarceloSalazar 2:ecbc6a14824c 43
MarceloSalazar 2:ecbc6a14824c 44 if(hours != 0){
MarceloSalazar 2:ecbc6a14824c 45 hours -= 1;
MarceloSalazar 2:ecbc6a14824c 46 minutes = 59;
MarceloSalazar 2:ecbc6a14824c 47 seconds = 59;
MarceloSalazar 2:ecbc6a14824c 48 return;
MarceloSalazar 2:ecbc6a14824c 49 }
MarceloSalazar 1:0ed57c2fd528 50 }
MarceloSalazar 1:0ed57c2fd528 51
MarceloSalazar 1:0ed57c2fd528 52 int main () {
MarceloSalazar 1:0ed57c2fd528 53
MarceloSalazar 1:0ed57c2fd528 54 // Clean screen
MarceloSalazar 1:0ed57c2fd528 55 lcd.cls();
MarceloSalazar 2:ecbc6a14824c 56 lcd.printf("Countdown");
MarceloSalazar 1:0ed57c2fd528 57
MarceloSalazar 2:ecbc6a14824c 58 update_lcd();
MarceloSalazar 2:ecbc6a14824c 59
MarceloSalazar 2:ecbc6a14824c 60 flipper.attach(&flip, 1.0); // interval 1 second
MarceloSalazar 2:ecbc6a14824c 61
MarceloSalazar 0:95d8c08cb5d4 62 while(1) {
MarceloSalazar 2:ecbc6a14824c 63 if (t1s){
MarceloSalazar 2:ecbc6a14824c 64 t1s = 0;
MarceloSalazar 2:ecbc6a14824c 65 myled = !myled;
MarceloSalazar 2:ecbc6a14824c 66 count_down();
MarceloSalazar 2:ecbc6a14824c 67 update_lcd();
MarceloSalazar 2:ecbc6a14824c 68 }
MarceloSalazar 1:0ed57c2fd528 69 }
MarceloSalazar 0:95d8c08cb5d4 70 }