#include <Servo.h>
// Define los pines para los botones y los servomotores
const int botonPin1 = 2; // Botón para activar un servo
const int botonPin2 = 3; // Botón para activar dos servos
const int botonPin3 = 4; // Botón para activar tres servos
const int servoPin1 = 9; // Pin del primer servo
const int servoPin2 = 10; // Pin del segundo servo
const int servoPin3 = 11; // Pin del tercer servo
// Crea objetos Servo para cada servomotor
Servo servo1;
Servo servo2;
Servo servo3;
// Variables para almacenar el estado de los botones
int estadoBotonAnterior1 = LOW;
int estadoBotonAnterior2 = LOW;
int estadoBotonAnterior3 = LOW;
int estadoBotonActual1;
int estadoBotonActual2;
int estadoBotonActual3;
// Variables para almacenar la posición actual de los servomotores
int posicionServo1 = 90; // Posición inicial del servo 1
int posicionServo2 = 90; // Posición inicial del servo 2
int posicionServo3 = 90; // Posición inicial del servo 3
void setup() {
// Inicializa los botones como entradas
pinMode(botonPin1, INPUT);
pinMode(botonPin2, INPUT);
pinMode(botonPin3, INPUT);
// Inicializa los servos en los pines especificados
servo1.attach(servoPin1);
servo2.attach(servoPin2);
servo3.attach(servoPin3);
// Mueve los servos a la posición inicial
servo1.write(posicionServo1);
servo2.write(posicionServo2);
servo3.write(posicionServo3);
}
void loop() {
// Lee el estado actual de los botones
estadoBotonActual1 = digitalRead(botonPin1);
estadoBotonActual2 = digitalRead(botonPin2);
estadoBotonActual3 = digitalRead(botonPin3);
// Si hay un cambio en el estado del primer botón
if (estadoBotonActual1 != estadoBotonAnterior1) {
// Si el nuevo estado del primer botón es alto (presionado)
if (estadoBotonActual1 == HIGH) {
// Activa solo el primer servo
activarServo(servo1, posicionServo1);
}
// Actualiza el estado del primer botón anterior al actual
estadoBotonAnterior1 = estadoBotonActual1;
}
// Si hay un cambio en el estado del segundo botón
if (estadoBotonActual2 != estadoBotonAnterior2) {
// Si el nuevo estado del segundo botón es alto (presionado)
if (estadoBotonActual2 == HIGH) {
// Activa los dos primeros servos
activarServo(servo1, posicionServo1);
activarServo(servo2, posicionServo2);
}
// Actualiza el estado del segundo botón anterior al actual
estadoBotonAnterior2 = estadoBotonActual2;
}
// Si hay un cambio en el estado del tercer botón
if (estadoBotonActual3 != estadoBotonAnterior3) {
// Si el nuevo estado del tercer botón es alto (presionado)
if (estadoBotonActual3 == HIGH) {
// Activa los tres servos
activarServo(servo1, posicionServo1);
activarServo(servo2, posicionServo2);
activarServo(servo3, posicionServo3);
}
// Actualiza el estado del tercer botón anterior al actual
estadoBotonAnterior3 = estadoBotonActual3;
}
}
// Función para activar un servo con una posición específica
void activarServo(Servo& servo, int& posicion) {
// Mueve el servo a la posición especificada
if (posicion == 90) {
posicion = 180;
} else {
posicion = 90;
}
servo.write(posicion);
}