#include <LiquidCrystal_I2C.h>
byte currentButtonState = 0;
byte prevButtonState = 99;
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
lcd.init();
for (int i = 0; i < 8; i++) {
pinMode(i, INPUT_PULLUP);
}
lcd.backlight();
}
void loop()
{
currentButtonState = 0;
for (int i = 0; i < 8; i++) {
currentButtonState |= (!digitalRead(i)) << i;
}
if (prevButtonState != currentButtonState) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("0x");
if (currentButtonState < 16) {
lcd.print("0");
}
lcd.print(currentButtonState, HEX);
for (int i = 0; i < 8; i++) {
lcd.setCursor((7 - i), 1);
if (bitRead(currentButtonState, i)) {
lcd.print("1");
} else {
lcd.print("0");
}
}
switch (currentButtonState) {
case B10000001:
lcd.noBacklight();
break;
case B01000010:
lcd.backlight();
break;
}
}
prevButtonState = currentButtonState;
}
void startTimer() {
TCCR1A = 0;
TCCR1B = bit(CS10);
TCNT1 = 0;
}
void endTimerAndPrint() {
unsigned int cycles = TCNT1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cyc: ");
lcd.print(cycles - 1);
lcd.setCursor(0, 1);
lcd.print("Mic: ");
lcd.print((float)(cycles - 1) / 16);
}