const int servoPin = 13; // Pin del servo
const int botonPin = 12; // Pin del botón
// Configuración de PWM
const int servoMinPulse = 1000; // Ancho del pulso mínimo en microsegundos (1 ms)
const int servoMaxPulse = 2000; // Ancho del pulso máximo en microsegundos (2 ms)
const int servoPeriod = 20000; // Periodo de PWM en microsegundos (20 ms)
void setup() {
pinMode(servoPin, OUTPUT);
pinMode(botonPin, INPUT_PULLUP); // Configura el botón con resistencia pull-up
}
void loop() {
// Lee el estado del botón
int botonEstado = digitalRead(botonPin);
if (botonEstado == LOW) { // Si el botón está presionado
Serial.println("Acceso Autorizado");
abrirPuerta();
delay(5000); // Puerta abierta por 5 segundos
cerrarPuerta();
} else {
Serial.println("Esperando acceso...");
}
delay(100); // Espera corta para evitar lecturas erráticas
}
// Función para abrir la puerta
void abrirPuerta() {
for (int i = 0; i < 180; i++) {
int pulseWidth = map(i, 0, 180, servoMinPulse, servoMaxPulse);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(servoPin, LOW);
delayMicroseconds(servoPeriod - pulseWidth);
}
}
// Función para cerrar la puerta
void cerrarPuerta() {
for (int i = 180; i >= 0; i--) {
int pulseWidth = map(i, 0, 180, servoMinPulse, servoMaxPulse);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(servoPin, LOW);
delayMicroseconds(servoPeriod - pulseWidth);
}
}