i am new in arduino.. i want to mke a countdown timer by using two push buttons and lcd 16*2 . how can i use switch case and break...
Countdownt timer function::
Push button 1 : Start, stop, reset by pressing twice
Push Button 2: Time count increases by 1 minute each time by press button 2
Flow::
① Set the time with push button 2.
② Start timer with push button 1
③ push button 1 to stop the timer
④ Start the timer again with push button 1
⑤ The buzzer will sounds in when it will be 0 seconds.
⑥ push button 1 will stop the buzzer
⑦ Return to ①
sketch::
#include <Debounce.h>
#include <LiquidCrystal.h>
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
unsigned long int timeNow = 0;
unsigned long int elapsedTime = 0;
int button1State = 0;
int button2State = 0;
unsigned long int setTime = 0;
String readableTime;
byte button1 = 4;
byte button2 = 5;
byte Buzzer = 3;
int timerStatus = 0;
int tPause = 0;
int timeUp = 0;
unsigned long int seconds;
unsigned long int minutes;
unsigned long int timePassed;
unsigned long int remainingTime = 0;
unsigned long int pausedTime = 0;
unsigned long int resumeTime = 0;
unsigned long int startTime = 0;
unsigned long int totalPausedTime = 0;
unsigned long int timePaused = 0;
Debounce Button1(button1); // Button1 debounced, with default 50ms debounce time.
Debounce Button2(button2, 50, true); // Button2 debounced, with custom debounce time.
void setup() {
Serial.begin(9600);
pinMode(button1, INPUT);
pinMode(button2, INPUT); // Also works with INPUT_PULLUP
pinMode(Buzzer, OUTPUT);
//getReadableTime(readableTime);
lcd.begin(16,2);
lcd.clear();
//lcd.backlight(); // Turning on the backlight
lcd.setCursor(0, 0); //Set LCD cursor to character 3 on line 0
lcd.print("TIMER");
lcd.setCursor(0, 1); //Move LCD cursor to character 0 on line 1
lcd.print("00:00");
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0); //Set LCD cursor to character 3 on line 0
lcd.print("TIMER");
lcd.setCursor(2, 1); //Move LCD cursor to character 0 on line 1
lcd.print(":");
lcd.setCursor(3, 1); //Move LCD cursor to character 0 on line 1
lcd.print("00");
lcd.setCursor(0, 1); //Move LCD cursor to character 0 on line 1
lcd.print("00");
if (Button1.read() == HIGH && button1State == 1) {
Serial.println("Butten 1!");
startTime = millis();
timerStatus = 1;
timePassed = millis() - startTime - totalPausedTime;
lcd.clear();
lcd.setCursor(0, 0); //Set LCD cursor to character 3 on line 0
lcd.print("TIMER");
lcd.setCursor(4, 1); //Move LCD cursor to character 0 on line 1
lcd.print("00");
lcd.setCursor(0, 1); //Move LCD cursor to character 0 on line 1
lcd.print("00");
button1State = 0;
delay(800);
while (timerStatus != 0) {
//button1Action();
timePassed = millis() - startTime - totalPausedTime;
remainingTime = setTime * 1000 * 60 - timePassed;
seconds = remainingTime / 1000;
minutes = seconds / 60;
lcd.clear();
lcd.setCursor(0, 0); //Set LCD cursor to character 3 on line 0
lcd.print("TIMER");
lcd.setCursor(4, 1); //Move LCD cursor to character 0 on line 1
lcd.print(seconds);
lcd.setCursor(0, 1); //Move LCD cursor to character 0 on line 1
lcd.print(minutes);
Serial.print("Time Passed: ");
Serial.println(timePassed/1000);
//paused
if (Button1.read() == HIGH && tPause == 0 && button1State == 1) {
Serial.println("Paused ");
tPause = 1;
pausedTime = millis();
button1State = 0;
while (Button1.read()) {
Serial.print(".");
}
delay(800);
}
// start
else if (Button1.read() == HIGH && tPause == 1 && button1State == 1) {
Serial.println("Started ");
tPause = 0;
resumeTime = millis();
totalPausedTime = resumeTime - pausedTime;
button1State = 0;
delay(800);
}
// Time Out
else if (tPause == 0 && timePassed >= setTime * 1000 * 60) {
Serial.println("Time Out ");
////buzz 0n///
tone(Buzzer, 1000); // Send 1KHz sound signal...
delay(1000); // ...for 1 sec
seconds = 0;
minutes = 0;
timeUp = 1;
timerStatus = 0;
setTime = 0;
remainingTime = 0;
pausedTime = 0;
resumeTime = 0;
startTime = 0;
totalPausedTime = 0;
timePaused = 0;
break;
}
else {
button1State = 1;
button2State = 1;
delay(100);
}
delay(500);
}
}
else if ( Button2.read() == HIGH && button2State == 1) {
Serial.println("Butten 2!");
button2State = 0;
//button2Action();
setTime++;
button2State = 0;
lcd.clear();
lcd.setCursor(0, 0); //Set LCD cursor to character 3 on line 0
lcd.print("TIMER");
lcd.setCursor(0, 4); //Move LCD cursor to character 0 on line 1
lcd.print(setTime);
delay(800);
}
else {
button1State = 1;
button2State = 1;
delay(100);
}
if (timeUp = 1 && Button1.read() == HIGH) {
// Buzz off
Serial.println("Buzzer Off");
digitalWrite(Buzzer, LOW);
timeUp = 0;
}
}