#include <Arduino.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
int timer = 0;
int prevTimer =00;
bool pinstate = 0;
unsigned long previousMillis = 0; // stores last time the counter was updated
const long interval = 1000; // interval for the counter update (1 second)
unsigned long displaySleepMillis = 0; // stores last time the display was active
const long displaySleepInterval = 10000; // display sleep interval (5 minutes)
bool isTimerSet = true; // Flag to track if prevTimer has been set
void setup(void) {
u8g2.begin(); // initialise display
u8g2.setContrast(127);
pinMode(2, INPUT);
u8g2.setFont(u8g2_font_logisoso50_tn); // set font
u8g2.setCursor(30 , 64);
u8g2.print("00");
u8g2.sendBuffer();
displaySleepMillis = millis(); // set initial display activity time
oldTime();
}
void loop() {
unsigned long currentMillis = millis(); // Get the current time
int pinstate = digitalRead(2);
if (pinstate == 1) {
oldTime(); //update old time only atstart of new time
// if the pin is high, update the counter
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
count();
}
displaySleepMillis = currentMillis; // reset display activity time
isTimerSet = false; // Reset the flag when pinstate is high
} else {
if (!isTimerSet) {
prevTimer = timer-1;
isTimerSet = true; // Set the flag to true after setting prevTimer
}
timer = 0;
}
// check if the display should sleep
if (currentMillis - displaySleepMillis >= displaySleepInterval) {
u8g2.setPowerSave(1); // put display to sleep
} else {
u8g2.setPowerSave(0); // wake up display if it's active
}
}
void count() {
u8g2.clearBuffer(); // clear display
u8g2.setCursor(30, 64);
if (timer < 10) {
u8g2.print("0");
}
u8g2.print(timer); // draw string
oldTime();
u8g2.sendBuffer(); // move from mem onto display
timer++;
if (timer > 99) { // reset timer after 99 seconds
timer = 0;
}
}
void oldTime(){
u8g2.setFont(u8g2_font_profont11_mn);
u8g2.setCursor(60,10);
if(prevTimer<10){
u8g2.print("0");
}
u8g2.print(prevTimer);
u8g2.sendBuffer();
u8g2.setFont(u8g2_font_logisoso50_tn); // set back font
}