#include <U8g2lib.h>
#define button 12
#define relay 8
int cldwn = 0;
int bstate_val = 0;
int rstate_val = 0;
String rstate = "Off";
String bstate = "Off";
String buttonText = "Off";
int prevButtonState = LOW;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
void setup() {
u8g2.begin();
Serial.begin(9600);
pinMode(button, INPUT);
pinMode(relay, OUTPUT);
}
void loop() {
int buttonState = digitalRead(button);
buttonText = (buttonState == HIGH) ? "On" : "Off";
// detect button press
if (buttonState == HIGH && prevButtonState == LOW && cldwn == 0) {
cldwn = 50;
rstate = "On";
rstate_val = 54;
digitalWrite(relay, HIGH);
display_state1(rstate, true, buttonText, buttonState);
delay(1000);
}
// cooldown logic
if (cldwn > 0) {
cldwn--;
rstate = "Off";
rstate_val = 0;
display_state1(rstate, false, buttonText, buttonState);
digitalWrite(relay, LOW);
}
prevButtonState = buttonState;
Serial.print("COOLDOWN: ");
Serial.print(cldwn);
Serial.print(", STATE: ");
Serial.println(rstate);
delay(1);
}
void display_state1(String rtext, bool rval, String btext, bool bval) {
int rval_c = rval ? 54 : 0;
int bval_c = bval ? 54 : 0;
u8g2.clearBuffer();
u8g2.setFontMode(1);
u8g2.setBitmapMode(1);
u8g2.drawFrame(0, 0, 128, 64);
u8g2.drawFrame(3, 3, 39, 58);
u8g2.drawFrame(44, 3, 40, 58);
u8g2.drawFrame(86, 3, 39, 58);
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(7, 16, "Relay");
u8g2.setFont(u8g2_font_haxrcorp4089_tr);
u8g2.drawStr(7, 26, "State");
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(48, 16, "Button");
u8g2.setFont(u8g2_font_haxrcorp4089_tr);
u8g2.drawStr(48, 26, "State");
u8g2.setFont(u8g2_font_helvB08_tr);
u8g2.drawStr(7, 57, rtext.c_str());
u8g2.drawStr(48, 57, btext.c_str());
u8g2.setDrawColor(2);
u8g2.drawBox(5, 5, 35, rval_c);
u8g2.drawBox(46, 5, 36, bval_c);
u8g2.sendBuffer();
}