int LED_PISO1 = 1;
int LED_PISO2 = 2;
int LED_PISO3 = 3;
int LED_ABAJO = 6;
int LED_ARRIBA = 7;
//btns de los pisos
int BOTON_PISO1 = 8;
int BOTON_PISO2 = 9;
int BOTON_PISO3 = 10;
int pisoActual = 1;
bool subiendo = false;
bool bajando = false;
void setup() {
pinMode(LED_PISO1, OUTPUT);
pinMode(LED_PISO2, OUTPUT);
pinMode(LED_PISO3, OUTPUT);
pinMode(LED_ABAJO, OUTPUT);
pinMode(LED_ARRIBA, OUTPUT);
pinMode(BOTON_PISO1, INPUT_PULLUP);
pinMode(BOTON_PISO2, INPUT_PULLUP);
pinMode(BOTON_PISO3, INPUT_PULLUP);
apagarLEDS();
}
void loop() {
// Verificar si se presionó algun btn
if (digitalRead(BOTON_PISO1) == LOW) {
moverElevador(1);
} else if (digitalRead(BOTON_PISO2) == LOW) {
moverElevador(2);
} else if (digitalRead(BOTON_PISO3) == LOW) {
moverElevador(3);
}
if (subiendo) {
subirElevador();
} else if (bajando) {
bajarElevador();
}
}
void apagarLEDS() {
digitalWrite(LED_PISO1, LOW);
digitalWrite(LED_PISO2, LOW);
digitalWrite(LED_PISO3, LOW);
digitalWrite(LED_ABAJO, LOW);
digitalWrite(LED_ARRIBA, LOW);
}
void encenderLED(int piso) {
apagarLEDS();
digitalWrite(LED_ABAJO, bajando);
digitalWrite(LED_ARRIBA, subiendo);
switch (piso) {
case 1:
digitalWrite(LED_PISO1, HIGH);
break;
case 2:
digitalWrite(LED_PISO2, HIGH);
break;
case 3:
digitalWrite(LED_PISO3, HIGH);
break;
}
}
void moverElevador(int destino) {
if (destino > pisoActual) {
subiendo = true;
bajando = false;
encenderLED(pisoActual); // Enciende el LED del piso actual al empezar a subir
} else if (destino < pisoActual) {
subiendo = false;
bajando = true;
encenderLED(pisoActual); // Enciende el LED del piso actual al empezar a bajar
} else {
// piso deseado
subiendo = false;
bajando = false;
}
}
void subirElevador() {
delay(1000); // tiempo de subida
if (pisoActual == 2 && subiendo) {
// Enciende el LED del piso intermedio al subir
encenderLED(2);
delay(1000); //tiempo de espera en el piso intermedio
apagarLEDS(); // Apaga todos los LEDs antes de llegar al destino final
}
pisoActual++;
encenderLED(pisoActual);
subiendo = false;
}
void bajarElevador() {
delay(1000); //tiempo de bajada
if (pisoActual == 2 && bajando) {
// Enciende el LED del piso intermedio al bajar
encenderLED(2);
delay(1000); // tiempo de espera en el piso intermedio
apagarLEDS(); // Apaga todos los LEDs antes de llegar al destino final
}
pisoActual--;
encenderLED(pisoActual);
bajando = false;
}