#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // Default I2C address for SSD1306
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// Initialize the display
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // Pause for 2 seconds
display.clearDisplay();
}
void loop() {
// Example: Display voltage percentage
int voltage = analogRead(A0); // Read voltage from analog pin
float voltagePercent = (voltage / 1023.0) * 100; // Convert to percentage
display.clearDisplay();
// Draw battery outline
display.drawRect(10, 10, 50, 25, SSD1306_WHITE); // Battery body
display.drawRect(60, 15, 5, 15, SSD1306_WHITE); // Battery terminal
// Draw battery bars based on voltage percentage
int bars = (voltagePercent / 100.0) * 4; // Calculate number of bars (0-4)
for (int i = 0; i < bars; i++) {
display.fillRect(12 + (i * 12), 12, 10, 21, SSD1306_WHITE); // Draw each bar
}
// Display voltage percentage
display.setCursor(0, 40);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print("Voltage: ");
display.print(voltagePercent);
display.print("%");
display.display();
delay(1000); // Update every second
}