#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 unsigned char epd_bitmap_WhatsApp_Image_2025_11_06_at_09 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x53, 0xdf,
0x80, 0x00, 0x00, 0x00, 0xfb, 0xff, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
0x87, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x02, 0xe4, 0xdf, 0x80, 0x00, 0x00, 0x00, 0xfc, 0xdf, 0x80, 0x00, 0x00, 0x00,
0x79, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x83, 0xf1, 0x80, 0x00, 0x00, 0x00, 0xf0, 0xdf, 0x80, 0x00,
0x00, 0x00, 0x78, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x30, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x00, 0x00, 0x00, 0x00,
0x04, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t heart8x8[] PROGMEM = {
0b00000000,
0b01100110,
0b11111111,
0b11111111,
0b01111110,
0b00111100,
0b00011000,
0b00000000
};
void drawCenteredBitmap48x64() {
int x = (SCREEN_WIDTH - 48) / 2;
int y = 0;
display.drawBitmap(x, y, epd_bitmap_WhatsApp_Image_2025_11_06_at_09, 48, 64, WHITE);
}
void typeLine(const char* s, int x, int y, uint16_t delayMs = 12) {
display.setCursor(x, y);
for (const char* p = s; *p; ++p) {
display.write(*p);
display.display();
delay(delayMs);
}
}
void blinkHeart(int x, int y, int times=6, int onMs=120, int offMs=120) {
for (int i=0; i<times; i++) {
display.drawBitmap(x, y, heart8x8, 8, 8, WHITE);
display.display();
delay(onMs);
display.fillRect(x, y, 8, 8, BLACK);
display.display();
delay(offMs);
}
}
void showIntro() {
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
// "Hi!"
typeLine("Hii!", 0, 0);
delay(150);
// Nama
typeLine("I'm " "YOUR_NAME_HERE", 0, 12);
delay(200);
drawCenteredBitmap48x64();
display.display();
delay(2200);
for (int x=0; x<SCREEN_WIDTH; x+=8) {
display.fillRect(x, 0, 8, SCREEN_HEIGHT, BLACK);
display.display();
delay(10);
}
typeLine("That's me ;)", 0, 12);
delay(200);
typeLine("I code, I vibe,", 0, 26);
typeLine("and low-key", 0, 38);
typeLine("vibin' w/ you ;)", 0, 50);
blinkHeart(120, 0, 8, 110, 110);
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
showIntro();
}
void loop() {
}