#include <Servo.h>
// Define los pines para los botones y los servomotores
const int botonPines[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pines para los 8 botones
const int servoPines[] = {10, 11, 12, 13, A0, A1, A2, A3}; // Pines para los 8 servomotores
// Crea objetos Servo para cada servomotor
Servo servos[8];
// Variable para almacenar el estado de cada servo (activado o desactivado)
bool servosActivados[8] = {false};
void setup() {
// Inicializa los botones como entradas
for (int i = 0; i < 8; i++) {
pinMode(botonPines[i], INPUT_PULLUP); // Usamos INPUT_PULLUP para activar resistencias internas
}
// Inicializa cada servo en los pines especificados
for (int i = 0; i < 8; i++) {
servos[i].attach(servoPines[i]);
servos[i].write(90); // Inicialmente todos los servos en posición neutral
}
}
void loop() {
// Itera sobre cada botón
for (int i = 0; i < 8; i++) {
// Si el botón actual está presionado
if (digitalRead(botonPines[i]) == LOW) { // LOW indica que el botón está presionado debido a INPUT_PULLUP
if (!servosActivados[i]) {
moverServos(i + 1); // Mueve la cantidad de servos correspondiente
servosActivados[i] = true;
} else {
devolverServos(i + 1); // Devuelve los servos a su posición original
servosActivados[i] = false;
}
// Espera hasta que el botón se suelte para evitar repeticiones rápidas
while (digitalRead(botonPines[i]) == LOW);
// Espera un breve tiempo para evitar rebotes del botón
delay(50);
}
}
}
// Función para mover la cantidad de servos especificada
void moverServos(int cantidad) {
// Mueve la cantidad especificada de servos
for (int i = 0; i < cantidad; i++) {
servos[i].write(180); // Mueve el servo a posición activada
}
}
// Función para devolver los servos a su posición original
void devolverServos(int cantidad) {
// Devuelve los servos a su posición original
for (int i = 0; i < cantidad; i++) {
servos[i].write(90); // Devuelve el servo a posición neutral
}
}