Perancangan dan Demonstrasi 2 Controller PS2 dengan ESP32 dan LCD 16×2 https://youtu.be/Q8dP4Qmrb3s| Simak vidio selengkapnyaPenggunaan stik PS2 dalam proyek elektronika merupakan pilihan favorit untuk membuat sistem kendali yang responsif. Pada artikel ini, Anda akan mempelajari cara menghubungkan dua controller PS2 ke satu ESP32 dan menampilkan status tombolnya secara real-time di layar LCD 16x2. | Daftar Isi Alat dan Bahan Design Wiring Diagram Blok Implementasi Hasil Akhir Code Kesimpulan Frequently Asked Questions | Alat dan Bahan Controller PS2 ESP-32 Link Pembelian Kabel Jumper Link Pembelian LCD 16x2 | Design Wiring Proses penyambungan kabel harus dilakukan secara teliti. Hal ini bertujuan agar ESP32 bisa membaca data dari kedua stik sekaligus tanpa ada bentrokan sinyal. | Diagram Blok Gambar diagram di bawah ini memperlihatkan alur kerja sistem secara singkat, mulai dari input stik hingga output ke layar LCD. | Implementasi Berikut adalah panduan pemasangan kabel dari stik PS2 dan LCD ke pin-pin yang ada di ESP32.Tabel koneksi ESP32 dengan Controller PS2 ESP-32 CONTROLLER 1 CONTROLLER 2 D34 ACK ACK – NC NC D18 CLK CLK D5 & D17 ATT ATT 5V VCC VCC GND GND GND – VIBR VIBR D23 CMD CMD D19 DATA DATA Tabel koneksi ESP32 dengan LCD 16x2 ESP-32 LCD 16x2 GND GND 5V VCC D21 SDA D22 SCL HardwareSiapkan ESP32, 2 Controller PS2, dan LCD 16×2 I2C.Hubungkan seluruh kabel jumper sesuai tabel koneksi di atas.Pastikan semua pin terpasang kencang agar sinyal tidak goyah.SoftwareBuka Arduino IDE, pilih board ESP32 Dev Module dan port yang sesuai.Jika belum ada, masukkan URL https://dl.espressif.com/dl/package_esp32_index.json di Preferences, lalu install ESP32 dari Boards Manager.Tempelkan kode program, klik Verify (✓), lalu klik Upload (→).Buka Serial Monitor dan periksa tampilan pada layar LCD 16×2. | Hasil Akhir Setelah semua kabel terpasang dan program diunggah, layar LCD akan menampilkan tulisan "STIK READY". Saat Anda menekan tombol di Stik 1 atau Stik 2, nama tombol tersebut akan langsung muncul di baris LCD secara instan. | Code ➕➕ ControllerPS2Code.cpp Library: 1.https://github.com/SukkoPera/PsxNewLib 2.https://github.com/arduino-libraries/LiquidCrystal #include #include #include const byte PS1_ATT = 5; const byte PS2_ATT = 17; const byte PS_CMD = 23; const byte PS_DAT = 19; const byte PS_CLK = 18; PsxControllerBitBang psx1; PsxControllerBitBang psx2; LiquidCrystal_I2C lcd(0x27, 16, 2); bool stik1Terhubung = false; bool stik2Terhubung = false; uint16_t lastButtons1 = 0; uint16_t lastButtons2 = 0; String tombolStik1 = "READY"; String tombolStik2 = "READY"; void tampilLCD() { lcd.setCursor(0, 0); lcd.print("STIK 1="); lcd.print(tombolStik1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print("STIK 2="); lcd.print(tombolStik2); lcd.print(" "); } void setup() { Serial.begin(115200); Wire.begin(21, 22); lcd.init(); lcd.backlight(); lcd.clear(); if (psx1.begin()) { stik1Terhubung = true; Serial.println("Stik 1 terhubung!"); } else { Serial.println("Stik 1 tidak terdeteksi."); } delay(500); if (psx2.begin()) { stik2Terhubung = true; Serial.println("Stik 2 terhubung!"); } else { Serial.println("Stik 2 tidak terdeteksi."); } tampilLCD(); } void loop() { if (stik1Terhubung && psx1.read()) { uint16_t buttons1 = psx1.getButtonWord(); if (buttons1 != lastButtons1 && buttons1 != 0) { if (psx1.buttonPressed(PSB_CROSS)) tombolStik1 = "X"; else if (psx1.buttonPressed(PSB_CIRCLE)) tombolStik1 = "O"; else if (psx1.buttonPressed(PSB_SQUARE)) tombolStik1 = "KOTAK"; else if (psx1.buttonPressed(PSB_TRIANGLE)) tombolStik1 = "SEGITIGA"; else if (psx1.buttonPressed(PSB_L1)) tombolStik1 = "L1"; else if (psx1.buttonPressed(PSB_L2)) tombolStik1 = "L2"; else if (psx1.buttonPressed(PSB_R1)) tombolStik1 = "R1"; else if (psx1.buttonPressed(PSB_R2)) tombolStik1 = "R2"; else if (psx1.buttonPressed(PSB_START)) tombolStik1 = "START"; else if (psx1.buttonPressed(PSB_SELECT)) tombolStik1 = "SELECT"; else if (psx1.buttonPressed(PSB_PAD_UP)) tombolStik1 = "ATAS"; else if (psx1.buttonPressed(PSB_PAD_DOWN)) tombolStik1 = "BAWAH"; else if (psx1.buttonPressed(PSB_PAD_LEFT)) tombolStik1 = "KIRI"; else if (psx1.buttonPressed(PSB_PAD_RIGHT)) tombolStik1 = "KANAN"; Serial.print("STIK 1 = "); Serial.println(tombolStik1); tampilLCD(); } lastButtons1 = buttons1; } if (stik2Terhubung && psx2.read()) { uint16_t buttons2 = psx2.getButtonWord(); if (buttons2 != lastButtons2 && buttons2 != 0) { if (psx2.buttonPressed(PSB_CROSS)) tombolStik2 = "X"; else if (psx2.buttonPressed(PSB_CIRCLE)) tombolStik2 = "O"; else if (psx2.buttonPressed(PSB_SQUARE)) tombolStik2 = "KOTAK"; else if (psx2.buttonPressed(PSB_TRIANGLE)) tombolStik2 = "SEGITIGA"; else if (psx2.buttonPressed(PSB_L1)) tombolStik2 = "L1"; else if (psx2.buttonPressed(PSB_L2)) tombolStik2 = "L2"; else if (psx2.buttonPressed(PSB_R1)) tombolStik2 = "R1"; else if (psx2.buttonPressed(PSB_R2)) tombolStik2 = "R2"; else if (psx2.buttonPressed(PSB_START)) tombolStik2 = "START"; else if (psx2.buttonPressed(PSB_SELECT)) tombolStik2 = "SELECT"; else if (psx2.buttonPressed(PSB_PAD_UP)) tombolStik2 = "ATAS"; else if (psx2.buttonPressed(PSB_PAD_DOWN)) tombolStik2 = "BAWAH"; else if (psx2.buttonPressed(PSB_PAD_LEFT)) tombolStik2 = "KIRI"; else if (psx2.buttonPressed(PSB_PAD_RIGHT)) tombolStik2 = "KANAN"; Serial.print("STIK 2 = "); Serial.println(tombolStik2); tampilLCD(); } lastButtons2 = buttons2; } delay(20); } | Kesimpulan Sistem pembacaan dua stik PS2 dengan ESP32 bisa berjalan lancar dan cepat. Dengan memisahkan jalur kabel ATT pada masing-masing stik, ESP32 bisa mengenali perintah dari kedua stik secara terpisah dan menampilkan hasilnya ke LCD tanpa jeda (delay). Kami Siap Bantu Kamu Jasa IoT Industri Integrasi IoT untuk efisiensi industri. ✔ Solusi custom ✔ Implementasi profesional ✔ Support berkelanjutan Konsultasi Gratis Web Dashboard IoT Monitoring data real-time & modern. ✔ Real-time ✔ UI modern ✔ Aman & scalable Hubungi Kami Sertifikasi IoT BNSP Upgrade skill + sertifikat resmi. ✔ Sertifikasi BNSP ✔ Praktik langsung ✔ Untuk profesional Daftar Sekarang | FAQ (Frequently Asked Questions) Mengapa LCD 16x2 tidak menampilkan tulisan sama sekali?Masalah ini biasanya terjadi karena pemutar kontras di bagian belakang modul I2C belum diputar, atau alamat I2C di dalam kode program belum sesuai (umumnya memakai 0x27 atau 0x3F). Apakah boleh menggunakan kabel yang panjang?Sinyal dari stik PS2 cukup peka terhadap gangguan (noise). Oleh sebab itu, gunakan kabel jumper yang relatif pendek agar komunikasi data tetap stabil. Apakah kedua stik PS2 bisa digunakan secara bersamaan?Bisa. Kabel Attention (ATT) dipasang pada pin ESP32 yang berbeda, sehingga sistem dapat membaca input dari kedua stik secara terpisah tanpa saling bertabrakan.