#include <Servo.h>
Servo Cortinillas; // Crea un objecto "Servo" llamado "Cortinillas"
float Angulo = 90.0; // Variable para la posicionde las Cortinillas (en Grados)
float step = 0.50; // Variable used for the Cortinillas position step
const int Pin_Baja = 8;
const int Pin_Sube = 9;
const int Pin_Cortinillas = 2;
const int Pin_LED = 13; // Se añade un nuevo LED de color ámbar
enum Mueve {Sube, Baja}; // Define los posibles movimiento: de Subida o de Bajada
void Mueve_Cortinillas(Mueve x);
void setup() {
pinMode(Pin_Sube, INPUT_PULLUP);
pinMode(Pin_Baja, INPUT_PULLUP);
//Serial.begin(115200); //Initializa serial
Cortinillas.attach(Pin_Cortinillas); // Asocia el servo cortinillas asu Pin (pin 2)
Cortinillas.write(Angulo); // pone Cortinillas en posición inicial
}
void loop() {
if (!digitalRead(Pin_Sube)){
Mueve_Cortinillas(Sube);
}
if (!digitalRead(Pin_Baja)){
Mueve_Cortinillas(Baja);
}
}
void Mueve_Cortinillas(Mueve x){
float incremento;
static boolean led_encendido = false; // Se declara como variable estática
digitalWrite(Pin_LED, HIGH);
led_encendido = true; // El LED se enciende solo cuando pulsamos el botón
digitalWrite(Pin_LED, LOW);
led_encendido = false; // El LED se apaga cuando no se está pulsando el botón
if (x == Sube){
incremento = step; // incremento es step y positivo
if (Angulo + incremento > 175.0){
Angulo = 175.0;
return; // Vuelve a Mueve_Cortinillas
}
}
if (x == Baja){
incremento = -step; // incremento es step y negativo (decremento)
if (Angulo + incremento < 5.0){
Angulo = 5.0;
return; // Vuelve a Mueve_Cortinillas
}
}
Angulo = Angulo + incremento; // Actualiza la nueva posición
Cortinillas.write(Angulo); // Posiciona las Cortinillas
delay(10); // Espera 10ms para que las Cortinillas recupere la nueva posición
}