Untitled
unknown
plain_text
2 years ago
3.0 kB
5
Indexable
#include <LiquidCrystal.h>
int seconds = 0;
int minutes = 0;
int count = 0;
bool isPaused = false;
unsigned long milliOffset = 0;
unsigned long pauseStart = 0;
// declare variables for the length of each period and the number of sessions before a longer break
const int study_minutes = 25;
const int short_break_minutes = 5;
const int long_break_minutes = 15;
const int repeats = 4;
// a variable used to time the breaks later
int break_duration;
// declare pins used for hardware
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int led1 = 6;
const int led2 = 7;
const int startButton = 8;
const int pauseButton = 9;
void setup() {
lcd.begin(16, 2); // Set up the number of columns and rows on the LCD.
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(startButton, INPUT);
pinMode(pauseButton, INPUT);
// display initial message to user
lcd.print("Press button");
lcd.setCursor(0, 1);
lcd.print("to start");
// wait for start button press to start
while (digitalRead(startButton) == LOW) {
// do nothing
}
}
void loop() {
count = 0; // set count to zero
while (count < repeats) {
// Study period
lcd.clear();
lcd.print("Study time!");
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
startTimer(study_minutes);
// Break period
lcd.clear();
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
if (count == (repeats - 1)) { // do a long break on the last repetition
break_duration = long_break_minutes;
lcd.print("Long break!");
} else { // otherwise do a short break
break_duration = short_break_minutes;
lcd.print("Short break!");
}
startTimer(break_duration);
count++; // increment the counter for the number of study sessions
}
}
void startTimer(int duration) {
minutes = 0;
while (minutes < duration) {
seconds = 0;
milliOffset = millis();
while (seconds < 60) {
if (digitalRead(pauseButton) == HIGH) {
isPaused = !isPaused; // Toggle pause state
delay(300); // Debounce delay
milliOffset += 300;
lcd.clear();
if (isPaused) {
pauseStart = millis();
lcd.print("Study time!");
lcd.setCursor(0, 1);
lcd.print("Paused!");
}
}
if (!isPaused) {
lcd.setCursor(0, 1);
if (minutes < 10) lcd.print("0");
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) lcd.print("0");
lcd.print(seconds);
seconds = (millis() - milliOffset) - ((millis() - milliOffset) % 1000);
seconds = seconds / 1000;
}
while (isPaused) {
if (digitalRead(pauseButton) == HIGH) {
milliOffset += (millis() - pauseStart);
pauseStart = 0;
isPaused = !isPaused; // Toggle pause state
delay(300); // Debounce delay
milliOffset += 300;
lcd.clear();
}
}
}
minutes++;
}
}Editor is loading...
Leave a Comment