Actividad 5

 

Uso de funciones

Para esta actividad no es necesario realizar ningún montaje nuevo.

El objetivo principal de esta actividad es aprovechar el código realizado en la actividad anterior e implementar el uso de las funciones en ese mismo código.

A continuación se muestran algunas pistas de utilidad y el código resultado.

A continuación se muestra un ejemplo de cómo declarar una función. En este caso, se declaran los
parámetros de entrada de la función como tipo lógico:

void led_Verde_Rojo(bool verde, bool rojo){
  digitalWrite(LedVerde,verde);
  digitalWrite(LedRojo,rojo);
}
Para usar una función únicamente debemos escribir el nombre de esta función indicándole entre
paréntesis, qué variables o qué valores se van a pasar como parámetros a la función. A
continuación, se muestra un ejemplo de cómo llamar a la función vista en la pista 1:

led_Verde_Rojo( 1, 0);
//Agregamos librerías
#include <Servo.h>
#include <HCSR04.h>
#include <Wire.h>  //Comunicacion con modulo I2C
#include <LiquidCrystal_I2C.h> //Pantalla LCD

// Se crea el objeto de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16,2);

#define trig2 9
#define echo2 8
#define trig1 7
#define echo1 6
#define LedRojo 3
#define LedVerde 4
#define Zumbador 12
#define BE 5 //boton entrada
#define BS 13 //boton salida

bool estadoVerde = false;
bool estadoRojo = false;

bool ultimoEstadoPulsador1 = HIGH;
bool ultimoEstadoPulsador2 = HIGH;

HCSR04 HC_SR_1(trig1, echo1);
HCSR04 HC_SR_2(trig2, echo2);

Servo servoMotor1;
Servo servoMotor2;

int Contador = 0;
int Salida = 0;

void led_Verde_Rojo(bool verde, bool rojo){
  digitalWrite(LedVerde,verde);
  digitalWrite(LedRojo,rojo);
}
void SonarZumbador(int times, int t_delay){
  for (int i = 0 ; i < times;i++){
    tone(Zumbador, 1000);
    delay(t_delay);
    noTone(Zumbador);
    delay(t_delay);
  }
}

void setup() {

  Serial.begin(9600);
  pinMode(LedRojo,OUTPUT);
  pinMode(LedVerde,OUTPUT);
  pinMode(BE,INPUT);
  pinMode(BS,INPUT);
  pinMode(Zumbador,OUTPUT);
 
  lcd.init();
  lcd.backlight();
  lcd.clear();

  servoMotor1.attach(10);
  servoMotor2.attach(11);

  tone(Zumbador, 100);
  delay(500);
  servoMotor1.write(0);
  servoMotor2.write(180);
  noTone(Zumbador);
  delay(500);
  servoMotor1.write(60);
  servoMotor2.write(90);
  tone(Zumbador, 100);
  delay(500);
  noTone(Zumbador);
  servoMotor1.write(0);
  servoMotor2.write(180);

}

void loop() {

  // Leer el estado actual de los pulsadores
  bool estadoPulsador1 = digitalRead(BE);
  bool estadoPulsador2 = digitalRead(BS);

  float distancia1 = HC_SR_1.dist();
  Serial.print("Distancia 1: ");
  Serial.println(distancia1);
  delay(100);

  float distancia2 = HC_SR_2.dist();
  Serial.print("Distancia 2: ");
  Serial.println(distancia2);
  delay(100);
  Serial.println("---------------------------------");

  if(Contador <= 5){
    led_Verde_Rojo( 1, 0);
    lcd.setCursor(0,0);
    lcd.print("Numero de");
    lcd.setCursor(0,1);
    lcd.print("vehiculos:");
    lcd.setCursor(12,1);
    lcd.print(Contador);
    delay(100);
  }

  if(Contador > 5){
    led_Verde_Rojo( 0, 1);
    lcd.setCursor(0,0);
    lcd.print("Parking");
    lcd.setCursor(0,1);
    lcd.print("Completo");
    delay(100);
  }

  if ((ultimoEstadoPulsador1 == HIGH && estadoPulsador1 == LOW) && (Contador <= 5)){
    servoMotor1.write(60);
    led_Verde_Rojo( 0, 1);
    lcd.clear();
    lcd.setCursor(0,0);
    Salida = 1;
    lcd.print("    Entrando    ");
    delay(500);
    SonarZumbador(1, 500);
    while(Salida == 1){
      delay(50);
      distancia1 = HC_SR_1.dist();
      Serial.print("Distancia 1: ");
      Serial.println(distancia1);
      if((distancia1 <= 6) && (distancia1>=1)){
        SonarZumbador(3, 177);
        Salida = 0;
      }
    }
    lcd.clear();
    servoMotor1.write(0);
    Contador = Contador + 1;
    Serial.println(Contador);
  }

  if((ultimoEstadoPulsador2 == HIGH && estadoPulsador2 == LOW) && (Contador > 0)){
    Salida = 1;
    servoMotor2.write(90);
    led_Verde_Rojo( 0, 1);
    lcd.setCursor(0,0);
    lcd.print("    Saliendo    ");
    delay(500);
    SonarZumbador(1, 500);
    while(Salida == 1){
      distancia2 = HC_SR_2.dist();
      Serial.print("Distancia 2: ");
      Serial.println(distancia2);
      delay(50);
      if((distancia2 >= 15) && (distancia2<25)){
        SonarZumbador(2, 333);
        Salida = 0;
      }
    }
    lcd.clear();
    servoMotor2.write(180);
    Contador = Contador - 1;
    Serial.println(Contador);
  }

  // Actualizar los últimos estados de los pulsadores
  ultimoEstadoPulsador1 = estadoPulsador1;
  ultimoEstadoPulsador2 = estadoPulsador2;

  delay(100); // Pequeña pausa para evitar rebotes

}

75% Completado
Vistas
11 Número de vistas
11 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.