#include <Servo.h>
// Define los pines para los botones y los servomotores
const int botonPines[] = {4, 5, 6, 3, 7, 2, 8}; // Pines para los 7 botones
const int servoPines[] = {9, 10, 11, 12, 13, A0, A1}; // Pines para los 7 servomotores
// Crea objetos Servo para cada servomotor
Servo servos[7];
// Variable para almacenar el estado de cada botón
bool estadoBotones[7];
// Variable para almacenar el índice del último botón presionado
int ultimoBoton = -1;
void setup() {
// Inicializa los botones como entradas
for (int i = 0; i < 7; i++) {
pinMode(botonPines[i], INPUT_PULLUP); // Usamos INPUT_PULLUP para activar resistencias internas
estadoBotones[i] = false; // Inicialmente, ningún botón está presionado
}
// Inicializa cada servo en los pines especificados
for (int i = 0; i < 7; 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 < 7; i++) {
// Si el botón actual está presionado y no estaba presionado anteriormente
if (digitalRead(botonPines[i]) == LOW && !estadoBotones[i]) {
// Mueve los servos correspondientes a la cantidad especificada
for (int j = 0; j <= i; j++) {
servos[j].write(180); // Mueve el servo a posición activada
}
// Desactiva los servos correspondientes al último botón presionado
if (ultimoBoton != -1 && ultimoBoton != i) {
for (int k = 0; k <= ultimoBoton; k++) {
servos[k].write(90); // Devuelve el servo a posición neutral
}
}
ultimoBoton = i; // Almacena el índice del último botón presionado
estadoBotones[i] = true; // Marca el botón como presionado
}
// Si el botón actual está suelto y estaba presionado anteriormente
else if (digitalRead(botonPines[i]) == HIGH && estadoBotones[i]) {
estadoBotones[i] = false; // Marca el botón como suelto
}
}
}