#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
// OLED Ekran Ayarları
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Reset pini yoksa -1 bırakılır
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Servo Tanımları
Servo s[8];
int pins[] = {2, 3, 4, 5, 6, 7, 11, 12};
// Göz Animasyon Değişkenleri
int gozKonumX = 64; // Merkez
int gozKonumY = 32; // Merkez
void setup() {
// OLED'i Başlat
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) for(;;);
// Servoları Titremeden Başlat
for(int i = 0; i < 8; i++) {
s[i].attach(pins[i]);
s[i].write(90);
delay(100);
}
kareGozCiz(gozKonumX, gozKonumY, false);
}
void loop() {
// GÖZ ANİMASYONU DÖNGÜSÜ
// 1. Rastgele etrafa bakma
for(int i = 0; i < random(1, 3); i++) {
gozKonumX = random(50, 78);
gozKonumY = random(25, 39);
kareGozCiz(gozKonumX, gozKonumY, false);
delay(random(1000, 2000));
}
// 2. Rastgele göz kırpma (Yavaşça)
gozKirp();
// ROBOT HAREKETİ (Hafif ve sarsıntısız)
for(int i = 0; i < 8; i++) {
s[i].write(95);
delay(50);
s[i].write(90);
}
}
// Göz Kırpma Animasyonu
void gozKirp() {
// Gözleri yavaşça kısıyormuş gibi hissettirmek için çizgiler
display.clearDisplay();
display.fillRect(20, 32, 38, 5, SSD1306_WHITE);
display.fillRect(70, 32, 38, 5, SSD1306_WHITE);
display.display();
delay(150);
// Aç
kareGozCiz(gozKonumX, gozKonumY, false);
}
// KARE GÖZ ÇİZİM FONKSİYONU
void kareGozCiz(int x, int y, bool kisik) {
display.clearDisplay();
// Görseldeki gibi köşeli, LED panel hissi veren yassı gözler
// `fillRoundRect` kullanarak köşeleri hafif yuvarlatılmış kareler çiziyoruz.
int gozGenislik = 38;
int gozYukseklik = 25;
// Konumlandırma için merkezden ofset (X ve Y)
int offset = 4; // Ne kadar kenara gidebilir?
int mapX = map(x, 50, 78, -offset, offset);
int mapY = map(y, 25, 39, -offset, offset);
// Sol Göz (İçi dolu beyaz, Wokwi'de mavi görünür)
display.fillRoundRect(20 + mapX, 20 + mapY, gozGenislik, gozYukseklik, 6, SSD1306_WHITE);
// Sağ Göz (İçi dolu beyaz)
display.fillRoundRect(70 + mapX, 20 + mapY, gozGenislik, gozYukseklik, 6, SSD1306_WHITE);
// Gözbebeği efekti (İçinde hareket eden siyah kare)
int gozbebegiEbat = 10;
display.fillRoundRect(20 + mapX + (gozGenislik-gozbebegiEbat)/2 + mapX, 20 + mapY + (gozYukseklik-gozbebegiEbat)/2 + mapY, gozbebegiEbat, gozbebegiEbat, 3, SSD1306_BLACK);
display.fillRoundRect(70 + mapX + (gozGenislik-gozbebegiEbat)/2 + mapX, 20 + mapY + (gozYukseklik-gozbebegiEbat)/2 + mapY, gozbebegiEbat, gozbebegiEbat, 3, SSD1306_BLACK);
if (digitalRead(8) == HIGH) {
display.print("22:23:59");
}
display.display();
}bu iki servo yerine normal araba motoru olduğunu düşün
Loading
ssd1306
ssd1306