// Mendefinisikan pin joystick
#define VERT_PIN A0 // Sumbu vertikal (Y)
#define HORZ_PIN A1 // Sumbu horizontal (X)
#define SEL_PIN 2 // Tombol joystick
// Mendefinisikan pin LED
#define LED_MERAH 8 // Kiri
#define LED_HIJAU 9 // Kanan
#define LED_BIRU 10 // Atas
#define LED_KUNING 11 // Bawah
// Batas tengah joystick (posisi idle/tengah)
const int tengahMin = 450;
const int tengahMax = 570;
void setup() {
// Inisialisasi pin LED sebagai output
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_BIRU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
// Inisialisasi pin joystick sebagai input
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP); // Tombol joystick menggunakan pull-up internal
// Serial untuk debugging
Serial.begin(9600);
}
void loop() {
// Membaca nilai analog dari sumbu X dan Y
int vert = analogRead(VERT_PIN);
int horz = analogRead(HORZ_PIN);
bool selPressed = digitalRead(SEL_PIN) == LOW; // Tombol joystick ditekan jika LOW
// Debugging: cetak nilai posisi sumbu dan tombol
Serial.print("X: ");
Serial.print(horz);
Serial.print(" Y: ");
Serial.print(vert);
Serial.print(" Pressed: ");
Serial.println(selPressed ? "Yes" : "No");
// Reset semua LED (matikan semua LED terlebih dahulu)
digitalWrite(LED_MERAH, LOW);
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_BIRU, LOW);
digitalWrite(LED_KUNING, LOW);
// Cek gerakan sumbu horizontal (kiri-kanan)
if (horz > tengahMax) {
// Gerak kiri (HORZ = 1023)
digitalWrite(LED_MERAH, HIGH);
} else if (horz < tengahMin) {
// Gerak kanan (HORZ = 0)
digitalWrite(LED_HIJAU, HIGH);
}
// Cek gerakan sumbu vertikal (atas-bawah)
if (vert > tengahMax) {
// Gerak atas (VERT = 1023)
digitalWrite(LED_BIRU, HIGH);
} else if (vert < tengahMin) {
// Gerak bawah (VERT = 0)
digitalWrite(LED_KUNING, HIGH);
}
// Opsional: lakukan sesuatu jika tombol joystick ditekan
if (selPressed) {
Serial.println("Tombol joystick ditekan!");
// Tambahkan logika jika diperlukan, seperti menyalakan semua LED
digitalWrite(LED_MERAH, HIGH);
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_BIRU, HIGH);
digitalWrite(LED_KUNING, HIGH);
}
// Beri sedikit jeda
delay(100);
}