#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int decrementButtonPin = 18; // GPIO 18 for decrement button
const int incrementButtonPin = 19; // GPIO 19 for increment button
int keyCount = 10;
bool decrementButtonState = HIGH; // initial state of decrement button
bool incrementButtonState = HIGH; // initial state of increment button
void setup() {
pinMode(decrementButtonPin, INPUT_PULLUP); // configure decrement button with pull-up
pinMode(incrementButtonPin, INPUT_PULLUP); // configure increment button with pull-up
// Initialize display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Key Available: ");
display.println(keyCount);
display.display();
}
void loop() {
// Read the state of both buttons
bool currentDecrementState = digitalRead(decrementButtonPin);
bool currentIncrementState = digitalRead(incrementButtonPin);
// Detect a falling edge (decrement button pressed)
if (decrementButtonState == HIGH && currentDecrementState == LOW) {
if (keyCount > 0) {
keyCount--; // Decrement key count
updateDisplay();
}
}
// Detect a falling edge (increment button pressed)
if (incrementButtonState == HIGH && currentIncrementState == LOW) {
if (keyCount < 10) {
keyCount++; // Increment key count
updateDisplay();
}
}
// Update button states
decrementButtonState = currentDecrementState;
incrementButtonState = currentIncrementState;
}
void updateDisplay() {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Key Available: ");
display.println(keyCount);
display.display();
}