#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define TRIGGER_PIN 13
#define ECHO_PIN 12
#define SERVO_PIN 11
#define JARAK_MAKSIMAL 100 // Jarak maksimum yang akan diukur oleh sensor ultrasonik (dalam cm)
#define PINTU_TERTUTUP 0 // Sudut palang pintu dalam posisi tertutup
#define PINTU_TERBUKA 90 // Sudut palang pintu dalam posisi terbuka
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Servo servo;
// Teks untuk ditampilkan
const char *teks[] = {
"Kelompok 11",
"1. Chendy.E.F E1I022009",
" ",
"2. Yandes.P.L E1I022059",
" ",
"3. Zaptia.T E1I022058",
"4. Aditya.J E1I022057",
"5. Effrina.D.A E1I022061",
" ",
"6. Jemsi.U E1I022045\n"
};
int jumlahTeks = sizeof(teks) / sizeof(teks[0]);
int posisiTeks = 0;
void setup() {
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
}
void loop() {
long durasi, jarak;
// Mengirim sinyal ultrasonik
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
// Menerima dan menghitung waktu perjalanan pulsa ultrasonik
durasi = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak berdasarkan waktu perjalanan
jarak = durasi * 0.034 / 2; // Mengubah waktu menjadi jarak dalam cm
// Mengontrol servo berdasarkan jarak
if (jarak < JARAK_MAKSIMAL) {
// Jika kendaraan terdeteksi, buka palang pintu
servo.write(PINTU_TERBUKA);
tampilkanStatus("Kendaraan: Ada");
} else {
// Jika tidak ada kendaraan, tutup palang pintu
servo.write(PINTU_TERTUTUP);
tampilkanStatus("Kendaraan: Tidak Ada");
}
delay(500); // Interval pengukuran jarak
}
void tampilkanStatus(const char *pesan) {
display.clearDisplay();
display.setTextSize(0.3);
display.setTextColor(SSD1306_WHITE);
// Tampilkan teks berjalan
for (int i = 0; i < 3; i++) {
display.setCursor(0, i * 8); // Set posisi teks
display.println(teks[(posisiTeks + i) % jumlahTeks]); // Ambil teks sesuai dengan posisiTeks yang diubah secara dinamis
}
// Tampilkan pesan tidak berjalan
display.setCursor(0, 3 * 8); // Set posisi untuk pesan yang tidak berjalan
display.println("\n \n");
display.println(pesan);
display.display();
// Atur posisi teks berikutnya untuk ditampilkan
posisiTeks = (posisiTeks + 1) % jumlahTeks;
}