#include <Servo.h>
// Definición de pines
const int buttonIncreasePin = 2; // Pin para el botón que aumenta el ángulo
const int buttonDecreasePin = 3; // Pin para el botón que disminuye el ángulo
const int servoPin = 9; // Pin para el servomotor
// Crear objeto Servo
Servo myServo;
// Variables
int angle = 90; // Ángulo inicial del servo (posición media)
int angleStep = 5; // Incremento/decremento de ángulo por pulsación
unsigned long lastDebounceTime = 0; // Tiempo del último rebote
unsigned long debounceDelay = 50; // Retardo para antirrebote
void setup() {
// Configurar pines de los botones como entrada con pull-up interno
pinMode(buttonIncreasePin, INPUT_PULLUP);
pinMode(buttonDecreasePin, INPUT_PULLUP);
// Adjuntar servo al pin correspondiente
myServo.attach(servoPin);
// Posicionar servo en ángulo inicial
myServo.write(angle);
// Inicializar comunicación serial (para depuración)
Serial.begin(9600);
Serial.println("Sistema listo. Ángulo inicial: 90°");
}
void loop() {
// Leer estado de los botones (LOW cuando están presionados por el PULLUP)
int increaseState = digitalRead(buttonIncreasePin);
int decreaseState = digitalRead(buttonDecreasePin);
// Manejar antirrebote y cambios de ángulo
if (millis() - lastDebounceTime > debounceDelay) {
if (increaseState == LOW) {
angle += angleStep;
if (angle > 180) angle = 180; // Limitar ángulo máximo
myServo.write(angle);
lastDebounceTime = millis();
Serial.print("Ángulo aumentado a: ");
Serial.println(angle);
}
else if (decreaseState == LOW) {
angle -= angleStep;
if (angle < 0) angle = 0; // Limitar ángulo mínimo
myServo.write(angle);
lastDebounceTime = millis();
Serial.print("Ángulo disminuido a: ");
Serial.println(angle);
}
}
delay(10); // Pequeño retardo para evitar fluctuaciones
}