#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);
const uint8_t frameHeaterOff[] PROGMEM = {
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b01111111
}
const uint8_t frameFanOff[] PROGMEM = {
0b00000000,
0b00000000,
0b00001000,
0b00001000,
0b00110110,
0b00001000,
0b00001000,
0b00000000
}
// 4 Frame animasi HEATER (frame1 - frame4)
const uint8_t heaterFrames[][8] PROGMEM = {
{
0b00000000,
0b01000100,
0b01100110,
0b00010001,
0b00110011,
0b01000100,
0b00100010,
0b01111111
},
{
0b00000000,
0b00100010,
0b00010001,
0b00110011,
0b01000100,
0b01100110,
0b00010001,
0b01111111
},
{
0b00000000,
0b00010001,
0b00110011,
0b01000100,
0b01100110,
0b00010001,
0b00100010,
0b01111111
},
{
0b00000000,
0b00100010,
0b01000100,
0b01100110,
0b00010001,
0b00110011,
0b01000100,
0b01111111
}
};
// 4 Frame animasi FAN (frame5 - frame8)
const uint8_t fanFrames[][8] PROGMEM = {
{
0b00000000,
0b00111000,
0b00001100,
0b00110101,
0b01101011,
0b01010110,
0b00011000,
0b00001110
},
{
0b00000000,
0b00001100,
0b00000100,
0b001110100,
0b00101001,
0b00010111,
0b00010000,
0b00011000
},
{
0b00000000,
0b01100001,
0b00010001,
0b00001010,
0b00011100,
0b00101000,
0b01000100,
0b01000011
},
{
0b00000000,
0b00110000,
0b00011001,
0b00001011,
0b00110110,
0b01101000,
0b01001100,
0b00000110
}
};
const int numFrames = 4;
uint8_t frameIndex = 0;
unsigned long previousMillis = 0;
const unsigned long frameInterval = 250;
void setup() {
display.begin(0x3C, true);
display.clearDisplay();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= frameInterval) {
previousMillis = currentMillis;
display.clearDisplay();
int baseX = 0; // Start dari paling kiri
int y = 0; // Baris atas (top of screen)
// Tampilkan Heater 1, 2, 3
for (int i = 0; i < 3; i++) {
display.drawBitmap(baseX + (i * 8), y, heaterFrames[frameIndex], 8, 8, SH110X_WHITE);
}
// Tampilkan Fan di posisi ke-4 (kanan dari heater)
display.drawBitmap(baseX + (3 * 8), y, fanFrames[frameIndex], 8, 8, SH110X_WHITE);
display.display();
frameIndex = (frameIndex + 1) % numFrames;
}
// Program tetap non-blocking dan responsif
}