Actividad 5: El ascensor con funciones

 

Esta actividad va a consistir en desarrollar todo el código hecho en la actividad anterior pero simplificando el código.

Para ello se usarán las funciones.


void LED_ON(bool led_1, bool led_2, bool led_3){
...
}
void Girar_motores(bool giro, int velocidad){
  digitalWrite(Gir1, giro);
  digitalWrite(Gir2, !giro);
  analogWrite(vel, velocidad);
}
// Se declaran las librerias que se van a utilizar en la practica
#include <Servo.h>

// Se definen los pines que se van a utilizar
#define BA1 13
#define BA2 12
#define BA3 3
#define vel 9
#define Gir1 10
#define Gir2 11
#define Led1 4
#define Led2 7
#define Led3 8
#define Zumbador 6
#define servo 5

Servo servoMotor;

int Planta = 1;
int Configurar = 1;

void LED_ON(bool led_1, bool led_2, bool led_3){
  digitalWrite(Led1,led_1);
  digitalWrite(Led2,led_2);
  digitalWrite(Led3,led_3);
}
void Sonar_zumbador(int veces, int frecuencia){
  for(int i = 1; i <= veces ; i++){
    digitalWrite(Zumbador,HIGH);
    delay(frecuencia);
    digitalWrite(Zumbador,LOW);
    if(i == veces){
      // la ultima vez no hay delay
    }else{
      delay(frecuencia);
    }
  }
}
void Girar_motores(bool giro, int velocidad){
  if(velocidad>255){
    velocidad = 255;
  }
  digitalWrite(Gir1, giro);
  digitalWrite(Gir2, !giro);
  analogWrite(vel, velocidad);
}

void setup() {
  // Se configuran los pines como entradas
  pinMode(BA1,INPUT);
  pinMode(BA2,INPUT);
  pinMode(BA3,INPUT);
  // Se configuran los pines como salidas  
  pinMode(vel,OUTPUT);
  pinMode(Gir1,OUTPUT);
  pinMode(Gir2,OUTPUT);
  pinMode(Zumbador,OUTPUT);
  pinMode(Led1,OUTPUT);
  pinMode(Led2,OUTPUT);
  pinMode(Led3,OUTPUT);

  Serial.begin(9600);
  servoMotor.attach(servo);
  servoMotor.write(180);
  // Se apagan todas las salidas
  LED_ON(0, 0, 0);
  digitalWrite(Zumbador,LOW);
  Girar_motores(0, 0); // Parar motores

}

void loop() {
  /*
  Se añade un pequeño apartado para configurar el offset de la altura del ascensor
  y corregir las desviaciones provocadas por diferentes cargas y/o tensiones de alimentacion
  */
  if (Configurar == 1){
    //El pulsador de la Planta 3 sube el ascensor
    if(digitalRead(BA3)==1){
      Girar_motores(1, 255);
    }
    //El pulsador de la Planta 1 baja el ascensor
    if(digitalRead(BA1)==1){
      Girar_motores(0, 255);
    }
    //Si no pulsamos nigún pulsador el ascensor se para
    if(digitalRead(BA1) == 0 && digitalRead(BA3) == 0){
      Girar_motores(0, 0);
    }
    // Si pulsamos el boton central se sale del modo de configuracion
    if(digitalRead(BA2) == 1){
      // Esperamos a que se deje de pulsar el boton
      while (digitalRead(BA2) == 1){}
      Sonar_zumbador(2, 100);
      Configurar = 0;
    }
  }
  // Entramos en el modo de funcionamiento normal
  if (Configurar == 0){
    // Si estamos en la primera planta
    if (Planta == 1){
      // Si no se pulsa el boton de ninguna otra planta
      if(digitalRead(BA2) == 0 && digitalRead(BA3) == 0){
        LED_ON(0, 0, 1); // Encender led de la planta 1
        Girar_motores(0, 0); // No mover motores
        delay(350);

      }
      // Si se pulsa el boton de planta 2
      if(digitalRead(BA2)==1){
        while(digitalRead(BA2)==1){} // Esperar a que se deje de pulsar el boton 2
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(1, 255); // Encender el motor DC
        Sonar_zumbador(2, 330); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 2; // Nueva posicicion del ascensor
      }    
      // Si se pulsa el boton de planta 3
      else if(digitalRead(BA3)==1){
        while(digitalRead(BA3)==1){} // Esperar a que se deje de pulsar el boton 3
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(1, 255); // Encender el motor DC
        Sonar_zumbador(3, 430); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 3; // Nueva posicicion del ascensor
      }
    }
    // Si estamos en la segunda planta
    if (Planta == 2){
      // Si no se pulsa el boton de ninguna otra planta
      if(digitalRead(BA1) == 0 && digitalRead(BA3) == 0){
        LED_ON(0, 1, 0); // Encender led de la planta 2
        Girar_motores(0, 0);  // No mover motores
        servoMotor.write(90); // Se abre la barrera
        delay(250);
      }
      // Si se pulsa el boton de planta 1
      if(digitalRead(BA1)==1){
        while(digitalRead(BA1)==1){} // Esperar a que se deje de pulsar el boton 1
        delay(100);
        servoMotor.write(180); // Bajar la barrera del servo
        delay(100);
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(0, 255); // Encender el motor DC
        Sonar_zumbador(3, 240); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 1; // Nueva posicicion del ascensor
      }    
      // Si se pulsa el boton de planta 3
      else if(digitalRead(BA3)==1){
        while(digitalRead(BA3)==1){}         // Esperar a que se deje de pulsar el boton 3
        delay(100);
        servoMotor.write(180); // Bajar la barrera del servo
        delay(100);
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(1, 255); // Encender el motor DC
        Sonar_zumbador(2, 330); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 3; // Nueva posicicion del ascensor
      }    
    }

    if (Planta == 3){
      // Si no se pulsa el boton de ninguna otra planta
      if(digitalRead(BA2) == 0 && digitalRead(BA3) == 0){
        LED_ON(1, 0, 0); // Encender led de la planta 3
        Girar_motores(0, 0);  // No mover motores
        delay(250);
      }
      // Si se pulsa el boton de planta 1
      if(digitalRead(BA1)==1){
        while(digitalRead(BA1)==1){} // Esperar a que se deje de pulsar el boton 1
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(0, 255); // Encender el motor DC
        Sonar_zumbador(5, 270); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 1; // Nueva posicicion del ascensor
      }    
      // Si se pulsa el boton de planta 2
      else if(digitalRead(BA2)==1){
        while(digitalRead(BA2)==1){} // Esperar a que se deje de pulsar el boton 2
        LED_ON(0, 0, 0); // Apagar todos los leds
        Girar_motores(0, 255); // Encender el motor DC
        Sonar_zumbador(3, 230); // Hacer sonido con el zumbador
        Girar_motores(0, 0); // Parar motores
        Planta = 2; // Nueva posicion del ascensor
      }    
    }
  }
}

88% Completado
Vistas
2 Número de vistas
2 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.