#include <Servo.h>
// Definición de pines para el joystick, los servomotores y los LEDs
const int joyXPin = A2; // Eje X del joystick
const int joyYPin = A1; // Eje Y del joystick
const int servo1Pin = 5; // Pin para el primer servo
const int servo2Pin = 6; // Pin para el segundo servo
const int led1Pin = 2; // Pin para el LED 1
const int led2Pin = 3; // Pin para el LED 2
const int inputPin = 8; // Pin para la entrada digital D8
const int outputPin = 7; // Pin para la salida digital D7
// Rangos para el joystick
const int joyCenter = 512; // Valor central del joystick en el eje X
const int joyThreshold = 50; // Umbral para evitar pequeñas fluctuaciones
Servo servo1;
Servo servo2;
void setup() {
// Inicialización de los servomotores
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
// Configuración de los pines de los LEDs y la entrada/salida digital
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(outputPin, OUTPUT);
}
void loop() {
// Lecturas de los valores del joystick
int joyX = analogRead(joyXPin);
// Calcula la diferencia desde el centro del joystick
int joyDiff = joyX - joyCenter;
// Si la diferencia es menor que el umbral, considera que está en el centro
if (abs(joyDiff) < joyThreshold) {
joyDiff = 0;
}
// Mapea la diferencia para el rango de movimiento del servo
int servo1Angle = map(joyDiff, -joyCenter, joyCenter, 0,180 );
int servo2Angle = map(joyDiff, -joyCenter, joyCenter, 180, 0);
// Limita el rango del ángulo del servo
servo1Angle = constrain(servo1Angle, 0, 90);
servo2Angle = constrain(servo2Angle, 0, 90);
// Mueve los servos a las posiciones calculadas
servo1.write(servo1Angle);
servo2.write(servo2Angle);
// Control de LEDs y entrada/salida digital
if (servo1Angle > 0) {
digitalWrite(led1Pin, HIGH); // Enciende el LED 1 cuando el servo 1 se mueve
} else {
digitalWrite(led1Pin, LOW); // Apaga el LED 1 cuando el servo 1 está en posición inicial
}
if (servo2Angle > 0) {
digitalWrite(led2Pin, HIGH); // Enciende el LED 2 cuando el servo 2 se mueve
} else {
digitalWrite(led2Pin, LOW); // Apaga el LED 2 cuando el servo 2 está en posición inicial
}
// Lee la entrada digital D8 y establece la salida D7 en consecuencia
if (digitalRead(inputPin) == HIGH) {
digitalWrite(outputPin, HIGH); // Nivel alto en D7 cuando D8 recibe una señal
} else {
digitalWrite(outputPin, LOW); // Nivel bajo en D7 cuando D8 no recibe una señal
}
// Espera un breve período de tiempo
delay(100);
}