#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
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Parameter mata (mirip Python: LEFT_EYE=(28,10,52,34) → pusat (40,22), radius 12)
// RIGHT_EYE=(76,10,100,34) → pusat (88,22), radius 12
int leftEyeCenterX = 40;
int eyeCenterY = 22;
int rightEyeCenterX = 88;
int eyeRadius = 12; // Radius untuk circle approx (lebar/tinggi=24px → r=12)
// Array offset gerakan (mirip pos_list)
int posList[8] = {-4, -2, 0, 2, 4, 2, 0, -2};
void setup() {
Serial.begin(115200);
// Inisialisasi I2C
Wire.begin(21, 22);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Mata seperti Python!");
display.display();
delay(2000);
}
void loop() {
// Loop animasi mata selamanya
for (int i = 0; i < 8; i++) {
drawEyes(posList[i], posList[i], false);
delay(150); // 0.15s per gerakan
}
// Blink
drawEyes(0, 0, true);
delay(200);
drawEyes(0, 0, false);
delay(200);
}
// Gambar Mata (solid white seperti Python, dengan offset dan blink)
void drawEyes(int leftOffset, int rightOffset, bool blink) {
display.clearDisplay();
if (blink) {
// Garis horizontal tebal untuk blink (mirip Python, width=2 tapi approx dengan multiple lines)
for (int w = 0; w < 2; w++) {
// Kiri: dari x=28 to 52, y=22
display.drawLine(28 + leftOffset, 22 + w, 52 + leftOffset, 22 + w, SSD1306_WHITE);
// Kanan: dari x=76 to 100, y=22
display.drawLine(76 + rightOffset, 22 + w, 100 + rightOffset, 22 + w, SSD1306_WHITE);
}
} else {
// Mata kiri: Solid white dengan offset
int lx = leftEyeCenterX + leftOffset;
display.fillCircle(lx, eyeCenterY, eyeRadius, SSD1306_WHITE); // Isi solid putih
display.drawCircle(lx, eyeCenterY, eyeRadius, SSD1306_WHITE); // Outline putih
// Mata kanan: Solid white dengan offset
int rx = rightEyeCenterX + rightOffset;
display.fillCircle(rx, eyeCenterY, eyeRadius, SSD1306_WHITE); // Isi solid putih
display.drawCircle(rx, eyeCenterY, eyeRadius, SSD1306_WHITE); // Outline putih
}
display.display();
}