#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);
// Frame animasi DASAI MOCHI
const uint8_t frameCount = 4;
const uint8_t *frames[frameCount] = {
// Frame 1: Mochi normal
new uint8_t[16*16] {
0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x3F,0xFC,0x7F,0xFE,
0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,
0x03,0xC0,0x00,0x00
},
// Frame 2: Mochi senyum
new uint8_t[16*16] {
0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,0x3F,0xFC,0x7F,0xFE,
0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,
0x03,0xC0,0x00,0x00
},
// Frame 3: Mochi mata tertutup senang
new uint8_t[16*16] {
0x00,0x00,0x03,0xC0,0x0C,0x30,0x10,0x08,0x20,0x04,0x3F,0xFC,0x7F,0xFE,
0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,
0x03,0xC0,0x00,0x00
},
// Frame 4: Mochi tertawa
new uint8_t[16*16] {
0x00,0x00,0x03,0xC0,0x0C,0x30,0x10,0x08,0x20,0x04,0x3F,0xFC,0x7F,0xFE,
0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,
0x03,0xC0,0x00,0x00
}
};
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
// Animasi DASAI MOCHI
for(int i = 0; i < frameCount; i++) {
display.clearDisplay();
// Gambar mochi
display.drawBitmap(
(SCREEN_WIDTH - 16)/2,
(SCREEN_HEIGHT - 16)/2,
frames[i], 16, 16, WHITE);
// Tambahkan teks "DASAI MOCHI"
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 60)/2, SCREEN_HEIGHT - 10);
display.println("DASAI MOCHI");
display.display();
delay(300);
}
// Efek tambahan: Mochi melompat
for(int y = 0; y < 5; y++) {
display.clearDisplay();
display.drawBitmap(
(SCREEN_WIDTH - 16)/2,
(SCREEN_HEIGHT - 16)/2 - y,
frames[1], 16, 16, WHITE);
display.setCursor((SCREEN_WIDTH - 60)/2, SCREEN_HEIGHT - 10);
display.println("DASAI MOCHI");
display.display();
delay(50);
}
for(int y = 5; y > 0; y--) {
display.clearDisplay();
display.drawBitmap(
(SCREEN_WIDTH - 16)/2,
(SCREEN_HEIGHT - 16)/2 - y,
frames[1], 16, 16, WHITE);
display.setCursor((SCREEN_WIDTH - 60)/2, SCREEN_HEIGHT - 10);
display.println("DASAI MOCHI");
display.display();
delay(50);
}
}