// Pines del joystick
const int VRx = A0;
const int VRy = A1;
const int SW = 2;
// Pines de los LEDs
const int ledRForward = 3;
const int ledRBackward = 4;
const int ledGRight = 5;
const int ledGLeft = 6;
const int ledHorn = 7;
void setup() {
// Inicializar los pines de los LEDs como salidas
pinMode(ledRForward, OUTPUT);
pinMode(ledRBackward, OUTPUT);
pinMode(ledGRight, OUTPUT);
pinMode(ledGLeft, OUTPUT);
pinMode(ledHorn, OUTPUT);
// Inicializar el pin del interruptor del joystick como entrada
pinMode(SW, INPUT_PULLUP);
// Iniciar la comunicación serie para la depuración
Serial.begin(9600);
}
void loop() {
// Leer los valores del joystick
int xValue = analogRead(VRx);
int yValue = analogRead(VRy);
int switchValue = digitalRead(SW);
// Depuración
Serial.print("X: "); Serial.print(xValue);
Serial.print(" | Y: "); Serial.print(yValue);
Serial.print(" | SW: "); Serial.println(switchValue);
// Control de LEDs basado en el movimiento del joystick
if (yValue < 400) {
digitalWrite(ledRForward, HIGH); // Adelante
} else {
digitalWrite(ledRForward, LOW);
}
if (yValue > 600) {
digitalWrite(ledRBackward, HIGH); // Atrás
} else {
digitalWrite(ledRBackward, LOW);
}
if (xValue > 600) {
digitalWrite(ledGRight, HIGH); // Derecha
} else {
digitalWrite(ledGRight, LOW);
}
if (xValue < 400) {
digitalWrite(ledGLeft, HIGH); // Izquierda
} else {
digitalWrite(ledGLeft, LOW);
}
// Simulación del bocina/interruptor
if (switchValue == LOW) {
digitalWrite(ledHorn, HIGH); // Bocina
} else {
digitalWrite(ledHorn, LOW);
}
// Combinar movimientos diagonales
if (yValue < 400 && xValue > 600) {
digitalWrite(ledRForward, HIGH);
digitalWrite(ledGRight, HIGH);
}
if (yValue < 400 && xValue < 400) {
digitalWrite(ledRForward, HIGH);
digitalWrite(ledGLeft, HIGH);
}
if (yValue > 600 && xValue > 600) {
digitalWrite(ledRBackward, HIGH);
digitalWrite(ledGRight, HIGH);
}
if (yValue > 600 && xValue < 400) {
digitalWrite(ledRBackward, HIGH);
digitalWrite(ledGLeft, HIGH);
}
delay(100); // Pequeño retardo para evitar lecturas erráticas
}