#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SH1106G display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Дані
float voltage = 12.5, current = 5.3, power = 60.0, capacity = 100.0;
float current1 = 2.0, power1 = 40.0, capacity1 = 80.0;
// 🔹 Кращі іконки 16x16
const unsigned char iconVolt[] PROGMEM = {
0x08,0x1C,0x3E,0x3E,0x7F,0x08,0x08,0x1C,
0x3E,0x1C,0x08,0x08,0x1C,0x3E,0x7F,0x00
};
const unsigned char iconAmp[] PROGMEM = {
0x10,0x30,0x70,0xF8,0xFC,0xFE,0x7E,0x3E,
0x1E,0x0E,0x0C,0x0C,0x0C,0x18,0x30,0x00
};
const unsigned char iconPower[] PROGMEM = {
0x04,0x0E,0x1F,0x3F,0x7F,0xFF,0x7F,0x3F,
0x1F,0x0E,0x04,0x0E,0x1F,0x3F,0x00,0x00
};
const unsigned char iconBattery[] PROGMEM = {
0x3C,0x42,0x81,0x81,0x81,0x81,0x81,0x81,
0x81,0x81,0x81,0x81,0x81,0x42,0x3C,0x00
};
void drawTable()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
int rowHeight = 16;
int colWidth = 60;
int paddingX = 6;
int spacingX = 4;
int spacingY = 2;
for(int i=0;i<4;i++)
{
for(int j=0;j<2;j++)
{
int x = j*(colWidth + spacingX);
int y = i*(rowHeight + spacingY);
display.drawRect(x, y, colWidth, rowHeight, SH110X_WHITE);
int iconY = y + (rowHeight - 16)/2;
int textY = y + (rowHeight - 8)/2;
switch(i)
{
case 0:
if(j==0){ display.drawBitmap(x+paddingX, iconY, iconVolt, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(voltage,1); display.print("V"); }
else { display.drawBitmap(x+paddingX, iconY, iconAmp, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(current1,1); display.print("A"); }
break;
case 1:
if(j==0){ display.drawBitmap(x+paddingX, iconY, iconAmp, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(current,1); display.print("A"); }
else { display.drawBitmap(x+paddingX, iconY, iconPower, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(power1,1); display.print("W"); }
break;
case 2:
if(j==0){ display.drawBitmap(x+paddingX, iconY, iconPower, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(power,1); display.print("W"); }
else { display.drawBitmap(x+paddingX, iconY, iconBattery, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(capacity1,0); display.print("Wh"); }
break;
case 3:
if(j==0){ display.drawBitmap(x+paddingX, iconY, iconBattery, 16,16,SH110X_WHITE); display.setCursor(x+paddingX+18, textY); display.print(capacity,0); display.print("Wh"); }
break;
}
}
}
display.display();
}
void setup()
{
if(!display.begin(0x3C,true)) while(1);
display.clearDisplay();
}
void loop()
{
voltage += random(-5,5)*0.01;
current += random(-5,5)*0.01;
power += random(-5,5)*0.05;
capacity += random(-5,5)*0.1;
current1 += random(-5,5)*0.01;
power1 += random(-5,5)*0.05;
capacity1 += random(-5,5)*0.1;
drawTable();
delay(500);
}