#include <Wire.h> // Library untuk komunikasi I2C
#include <Adafruit_GFX.h> // Library dasar untuk grafik OLED
#include <Adafruit_SSD1306.h> // Library untuk OLED Display
// Mendefinisikan ukuran layar OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1 // Tidak menggunakan pin reset khusus
// Membuat objek display untuk OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Mendefinisikan pin sensor HC-SR04 pada ESP32
#define trigPin 5 // GPIO5 sebagai pin trigger
#define echoPin 18 // GPIO18 sebagai pin echo
// Mendefinisikan pin LED pada ESP32 (gunakan pin yang aman)
#define redLedPin 13 // GPIO13 untuk LED Merah (indikator jarak dekat)
#define yellowLedPin 14 // GPIO14 untuk LED Kuning (indikator jarak sedang)
#define greenLedPin 27 // GPIO27 untuk LED Hijau (indikator jarak jauh)
// Menentukan kecepatan suara dalam cm/us
#define SOUND_SPEED 0.0343
long duration; // Variabel untuk menyimpan durasi waktu gelombang suara
float distanceCm; // Variabel untuk menyimpan jarak dalam cm
float prevDistance = 0; // Variabel untuk menyimpan jarak sebelumnya
// Fungsi untuk menggambar animasi dua mata pada OLED
void drawEyes(int position) {
display.clearDisplay();
// Menggambar bola mata kiri
display.drawCircle(32, 32, 20, SSD1306_WHITE); // lingkaran luar mata kiri
display.fillCircle(32 + position, 32, 8, SSD1306_WHITE); // bola hitam mata kiri
// Menggambar bola mata kanan
display.drawCircle(96, 32, 20, SSD1306_WHITE); // lingkaran luar mata kanan
display.fillCircle(96 + position, 32, 8, SSD1306_WHITE); // bola hitam mata kanan
display.display();
}
void setup() {
Serial.begin(115200); // Memulai komunikasi serial pada baud rate 115200
pinMode(trigPin, OUTPUT); // Menetapkan pin trigPin sebagai OUTPUT
pinMode(echoPin, INPUT); // Menetapkan pin echoPin sebagai INPUT
// Menetapkan pin LED sebagai OUTPUT
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
// Menghidupkan LED hijau untuk memastikan LED terhubung dengan benar
digitalWrite(greenLedPin, HIGH);
delay(1000); // LED hijau menyala selama 1 detik
digitalWrite(greenLedPin, LOW); // Matikan LED hijau setelah 1 detik
// Inisialisasi OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED initialization failed"));
while (true); // Berhenti jika OLED gagal diinisialisasi
}
display.display(); // Menampilkan layar awal
delay(2000); // Menunggu selama 2 detik
display.clearDisplay(); // Membersihkan layar OLED
}