#include <ezButton.h>
#include <LiquidCrystal_I2C.h>
byte clk = 2, dt = 3, sw = 4;
int count = 0, prevCount = -1;
String bin, dec, hex;
LiquidCrystal_I2C lcd(0x27, 20, 4);
ezButton button(sw);
void setup() {
attachInterrupt(digitalPinToInterrupt(clk), encoder, FALLING);
button.setDebounceTime(20);
lcd.init();
lcd.backlight();
delay(500);
lcd_print(0, 0, "-~ Number Converter");
lcd_print(0, 2, "Input:");
}
void encoder() {
prevCount = count;
if (digitalRead(dt) == HIGH) count++;
else count--;
count = constrain(count, 0, 256);
}
void loop() {
button.loop();
if (button.isPressed()) {
lcd.clear();
lcd_print(0, 0, "...");
delay(500);
bin = "BIN : " + String(count , BIN);
dec = "DEC : " + String(count , DEC);
hex = "HEX : " + String(count , HEX);
lcd.clear();
lcd_print(0, 0, "-~ Number Converter");
lcd_print(0, 1, bin);
lcd_print(0, 2, dec);
lcd_print(0, 3, hex);
delay(10000);
count = 0, prevCount = -1;
lcd.clear();
lcd_print(0, 0, "-~ Number Converter");
lcd_print(0, 2, "Input:");
}
if (prevCount != count) {
lcd_print(7, 2, " ");
delay(50);
lcd_print(7, 2, String(count));
prevCount = count;
}
delay(50);
}
void lcd_print(int x, int y, String message) {
lcd.setCursor(x, y);
lcd.print(message);
}