#include <Servo.
h> // Incluimos la librería Servo
// Definimos los pines de Arduino para cada servo
const int pinHombroDerecho = 2;
const int pinCodoDerecho = 3;
const int pinMunecaDerecha = 4;
const int pinPinzaDerecha = 5;
const int pinHombroIzquierdo = 6;
const int pinCodoIzquierdo = 7;
const int pinMunecaIzquierda = 8;
const int pinPinzaIzquierda = 9;
const int pinCaderaDerecha = 10;
const int pinRodillaDerecha = 11;
const int pinCaderaIzquierda = 12;
const int pinRodillaIzquierda = 13;
Servo servoHombroDerecho;
Servo servoCodoDerecho;
Servo servoMunecaDerecha;
Servo servoPinzaDerecha;
Servo servoHombroIzquierdo;
Servo servoCodoIzquierdo;
Servo servoMunecaIzquierda;
Servo servoPinzaIzquierda;
Servo servoCaderaDerecha;
Servo servoRodillaDerecha;
Servo servoCaderaIzquierda;
Servo servoRodillaIzquierda;
// Definimos las velocidades para los 3 tipos de movimiento
const int velocidadLenta = 10; // Retardo en milisegundos para movimientos lentos
const int velocidadMedia = 5; // Retardo en milisegundos para movimientos medianos
const int velocidadRapida = 2; // Retardo en milisegundos para movimientos rápidos
// Definimos el pin para el botón de cambio de velocidad
const int pinBoton = 14;
int velocidadActual = velocidadMedia; // Velocidad inicial
void setup() {
// Asignamos los pines para cada servo
[Link](pinHombroDerecho);
[Link](pinCodoDerecho);
[Link](pinMunecaDerecha);
[Link](pinPinzaDerecha);
[Link](pinHombroIzquierdo);
[Link](pinCodoIzquierdo);
[Link](pinMunecaIzquierda);
[Link](pinPinzaIzquierda);
[Link](pinCaderaDerecha);
[Link](pinRodillaDerecha);
[Link](pinCaderaIzquierda);
[Link](pinRodillaIzquierda);
// Inicializamos el botón como entrada
pinMode(pinBoton, INPUT_PULLUP);
// Posición inicial de los servos (ángulo neutral)
setServoAngles(90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90);
}
void loop() {
// Leemos el estado del botón y cambiamos la velocidad si está presionado
if (digitalRead(pinBoton) == LOW) {
delay(200); // Debounce para evitar lecturas erráticas
cambiarVelocidad();
}
// Movimiento de brazos y piernas con la velocidad actual
// Brazos - Movimiento lento
moveArm(servoHombroDerecho, 130, velocidadActual);
moveArm(servoHombroDerecho, 90, velocidadActual);
moveArm(servoHombroIzquierdo, 50, velocidadActual);
moveArm(servoHombroIzquierdo, 90, velocidadActual);
// Piernas - Movimiento lento
moveLeg(servoCaderaDerecha, 50, velocidadActual);
moveLeg(servoRodillaDerecha, 120, velocidadActual);
moveLeg(servoCaderaIzquierda, 130, velocidadActual);
moveLeg(servoRodillaIzquierda, 120, velocidadActual);
}
// Función para cambiar la velocidad actual
void cambiarVelocidad() {
if (velocidadActual == velocidadLenta) {
velocidadActual = velocidadMedia;
} else if (velocidadActual == velocidadMedia) {
velocidadActual = velocidadRapida;
} else {
velocidadActual = velocidadLenta;
}
}
// Función para establecer los ángulos de los servos de los brazos con una velocidad
determinada
void moveArm(Servo servo, int angle, int velocidad) {
int initialAngle = [Link]();
if (angle > initialAngle) {
for (int a = initialAngle; a <= angle; a++) {
[Link](a);
delay(velocidad);
}
} else {
for (int a = initialAngle; a >= angle; a--) {
[Link](a);
delay(velocidad);
}
}
}
// Función para establecer los ángulos de los servos de las piernas con una velocidad
determinada
void moveLeg(Servo servo, int angle, int velocidad) {
int initialAngle = [Link]();
if (angle > initialAngle) {
for (int a = initialAngle; a <= angle; a++) {
[Link](a);
delay(velocidad);
}
} else {
for (int a = initialAngle; a >= angle; a--) {
[Link](a);
delay(velocidad);
}
}
}
// Función para establecer los ángulos de todos los servos a la vez
void setServoAngles(int hombroDerecho, int codoDerecho, int munecaDerecha, int
pinzaDerecha,
int hombroIzquierdo, int codoIzquierdo, int munecaIzquierda, int pinzaIzquierda,
int caderaDerecha, int rodillaDerecha, int caderaIzquierda, int rodillaIzquierda) {
[Link](hombroDerecho);
[Link](codoDerecho);
[Link](munecaDerecha);
[Link](pinzaDerecha);
[Link](hombroIzquierdo);
[Link](codoIzquierdo);
[Link](munecaIzquierda);
[Link](pinzaIzquierda);
[Link](caderaDerecha);
[Link](rodillaDerecha);
[Link](caderaIzquierda);
[Link](rodillaIzquierda);
}
● Se agrega un nuevo pin pinBoton para el botón de cambio de velocidad, que debe ser
conectado a la placa Arduino y configurado como una entrada con resistencia pull-up
interna.
● La variable velocidadActual se utiliza para almacenar la velocidad actual seleccionada,
inicializada con la velocidad media.
● En el loop(), leemos el estado del botón con digitalRead(pinBoton) y llamamos a la
función cambiarVelocidad() si el botón está presionado. La función cambiarVelocidad()
cambia la velocidad actual al siguiente nivel.
● Los movimientos de brazos y piernas se realizan llamando a las funciones moveArm() y
moveLeg(), respectivamente, utilizando la velocidad actual seleccionada.
● La función cambiarVelocidad() actualiza velocidadActual para cambiar la velocidad entre
lenta, media y rápida en cada pulsación del botón.
● Las funciones moveArm() y moveLeg() ahora incluyen un parámetro adicional velocidad,
que determina el retardo entre cada incremento o decremento de posición de los
servomotores.