// Incluímos librerías necesarias.
# include <Servo.h>
// Definimos los pines usados en la placa.
# define pinServo 3
# define pinEjeX A0
# define pinEjeY A1
# define pinPulsador 4
// Declaramos variables globales.
Servo mi_servo;
int angulo = 90;
void setup() {
// Inicio comunicación por puerto serial.
Serial.begin(9600);
// Pin de la placa al que va conectado el pulsador del joystick
// es de entrada.
pinMode(pinPulsador, INPUT_PULLUP);
// "Fijamos" el servo a su pin correspondiente.
mi_servo.attach(pinServo);
// Ángulo comienza en posición central.
mi_servo.write(angulo);
}
void loop() {
// Declaramos variables locales.
int pulsador, ejeX, ejeY;
int ejeX_map, ejeY_map;
// Lectura y mapeo de todos los parámetros del joystick.
pulsador = digitalRead(pinPulsador);
ejeX = analogRead(pinEjeX);
ejeX_map = map(ejeX, 0, 1023, 0, 100);
ejeY = analogRead(pinEjeY);
ejeY_map = map(ejeY, 0, 1023, 0 , 100);
// Movimiento eje X hacia la izquierda lento.
if ((ejeX_map > 25) && (ejeX_map < 49)){
angulo = angulo + 1;
}
// Movimiento eje X hacia la izquierda rápido.
else if (ejeX_map < 25){
angulo = angulo + 5;
}
// Movimiento eje X hacia la derecha lento.
else if ((ejeX_map > 49) && (ejeX_map < 75)){
angulo = angulo - 1;
}
// Movimiento eje X hacia la derecha rápido.
else if (ejeX_map > 75){
angulo = angulo - 5;
}
// Protección de giro a ángulos negativos.
if (angulo < 0){
angulo = 0;
}
// Protección de giro a ángulos superiores a 180 grados.
else if (angulo > 180){
angulo = 180;
}
// Movimiento del servo al ángulo correspondiente.
mi_servo.write(angulo);
Serial.print(ejeX);
Serial.print("\t");
// Muestro valor del ángulo por puerto serial.
Serial.println(angulo);
// Retardo de 0.5 segundos.
delay(500);
}