Actividad 3: Control de semáforos con Funciones

Actividad 3

 

Control de semáforos con Funciones

En esta actividad el objetivo es implementar una función que nos permita controlar el encendido de los LEDs de todos los módulos instalados en la maqueta de manera sencilla.

Con el mismo montaje de la Actividad anterior, el objetivo ahora es conseguir que el semáforo funcione siguiendo la lógica usual, ayudándote del uso de funciones implementadas por nosotros. El funcionamiento debe ser el siguiente:

  • El Semáforo 1 habilita el paso de Coches cuando el Semáforo 2 lo bloquea, y viceversa.

  • Ambos Semáforos habilitan el paso de Peatones cuando bloquean la circulación de Coches.

  • En ambos Semáforos, entre la luz Verde para los Coches y la Roja, debe encenderse primero, al menos 1 segundo, la luz Amarilla.

Esta lógica de funcionamiento podemos resumirla en un diagrama de estados donde acordemos los estados de todas las luces LED en cada momento.

void configurarSemaforos(bool configuracionint duracion)

void transicionSemaforos(bool transicionint duracion)

Ambas funciones no devuelven ningún valor, por lo tanto la salida es void. Seguido están los nombres de las funciones, y entre paréntesis los argumentos que debemos pasar a las funciones con el tipo de cada uno de ellos.

La función configurarSemaforos recibe como entradas un booleano, que puede valer true o false, y un número entero. La función configurará los pines de los LEDs de los Semáforos según el valor dado de configuración durante el tiempo indicado en segundos con duración.

Por otro lado la función transicionSemaforos, que también recibe como entradas un booleano y un número entero, configura los estados de los pines de los LEDs de los Semáforos para transicionar entre las configuraciones 1 y 2, indicándolo con transición y mantiene este estado de transición durante el tiempo indicado en segundos con duración.
Recuerda que en programación existen los Condicionales. Con ellos podemos alterar el flujo de ejecución de un programa estableciendo condiciones que controlen las líneas de código que se ejecutan o no.

En Arduino, debemos utilizar el condicional de la siguiente manera:

if(condición) {

    // Líneas a ejecutar

}

donde "condición" será una comparación o verificación (utilizando los operadores correspondientes como "==", ">=" o "<=") que de cumplirse, permitiría la ejecución de las líneas de código escritas entre los corchetes del condicional.

int pinLedRojoCoches1 = 10; // Pin del LED Rojo del Módulo de 3 LED 1
int pinLedAmarilloCoches1 = 9; // Pin del LED Amarillo del Módulo de 3 LED 1
int pinLedVerdeCoches1 = 8; // Pin del LED Verde del Módulo de 3 LED 1

int pinLedRojoCoches2 = 5; // Pin del LED Rojo del Módulo de 3 LED 2
int pinLedAmarilloCoches2 = 4; // Pin del LED Amarillo del Módulo de 3 LED 2
int pinLedVerdeCoches2 = 3; // Pin del LED Verde del Módulo de 3 LED 2

int pinLedVerdePeatones1 = 7; // Pin del LED Verde del Módulo de 2 LED 1
int pinLedRojoPeatones1 = 6; // Pin del LED Rojo del Módulo de 2 LED 1

int pinLedRojoPeatones2 = 13; // Pin del LED Rojo del Módulo de 2 LED 2
int pinLedVerdePeatones2 = 12; // Pin del LED Verde del Módulo de 2 LED 2

void configurarSemaforos(bool configuracion) {

    // Primera configuración de los semáforos
    if(configuracion == false) {

        // Configuramos el estado del primer semáforo
        digitalWrite(pinLedRojoCoches1, HIGH);
        digitalWrite(pinLedAmarilloCoches1, LOW);
        digitalWrite(pinLedVerdeCoches1, LOW);
        digitalWrite(pinLedRojoPeatones1, LOW);
        digitalWrite(pinLedVerdePeatones1, HIGH);

        // Configuramos el estado del segundo semáforo
        digitalWrite(pinLedRojoCoches2, LOW);
        digitalWrite(pinLedAmarilloCoches2, LOW);
        digitalWrite(pinLedVerdeCoches2, HIGH);
        digitalWrite(pinLedRojoPeatones2, HIGH);
        digitalWrite(pinLedVerdePeatones2, LOW);

    } else {

        // Configuramos el estado del primer semáforo
        digitalWrite(pinLedRojoCoches1, LOW);
        digitalWrite(pinLedAmarilloCoches1, LOW);
        digitalWrite(pinLedVerdeCoches1, HIGH);
        digitalWrite(pinLedRojoPeatones1, HIGH);
        digitalWrite(pinLedVerdePeatones1, LOW);

        // Configuramos el estado del segundo semáforo
        digitalWrite(pinLedRojoCoches2, HIGH);
        digitalWrite(pinLedAmarilloCoches2, LOW);
        digitalWrite(pinLedVerdeCoches2, LOW);
        digitalWrite(pinLedRojoPeatones2, LOW);
        digitalWrite(pinLedVerdePeatones2, HIGH);

    }

}

void transicionSemaforos(bool transicion) {

    // Primera configuración de los semáforos
    if(transicion == false) {

        // Configuramos el estado del primer semáforo
        digitalWrite(pinLedRojoCoches1, HIGH);
        digitalWrite(pinLedAmarilloCoches1, LOW);
        digitalWrite(pinLedVerdeCoches1, LOW);
        digitalWrite(pinLedRojoPeatones1, LOW);
        digitalWrite(pinLedVerdePeatones1, HIGH);

        // Configuramos el estado del segundo semáforo
        digitalWrite(pinLedRojoCoches2, LOW);
        digitalWrite(pinLedAmarilloCoches2, HIGH);
        digitalWrite(pinLedVerdeCoches2, LOW);
        digitalWrite(pinLedRojoPeatones2, HIGH);
        digitalWrite(pinLedVerdePeatones2, LOW);

    } else {

        // Configuramos el estado del primer semáforo
        digitalWrite(pinLedRojoCoches1, LOW);
        digitalWrite(pinLedAmarilloCoches1, HIGH);
        digitalWrite(pinLedVerdeCoches1, LOW);
        digitalWrite(pinLedRojoPeatones1, HIGH);
        digitalWrite(pinLedVerdePeatones1, LOW);

        // Configuramos el estado del segundo semáforo
        digitalWrite(pinLedRojoCoches2, HIGH);
        digitalWrite(pinLedAmarilloCoches2, LOW);
        digitalWrite(pinLedVerdeCoches2, LOW);
        digitalWrite(pinLedRojoPeatones2, LOW);
        digitalWrite(pinLedVerdePeatones2, HIGH);

    }

}

void setup() {

    // Configurar el modo de funcionamiento de los pines de los LEDs
    pinMode(pinLedRojoCoches1, OUTPUT);
    pinMode(pinLedAmarilloCoches1, OUTPUT);
    pinMode(pinLedVerdeCoches1, OUTPUT);

    pinMode(pinLedRojoCoches2, OUTPUT);
    pinMode(pinLedAmarilloCoches2, OUTPUT);
    pinMode(pinLedVerdeCoches2, OUTPUT);

    pinMode(pinLedRojoPeatones1, OUTPUT);
    pinMode(pinLedVerdePeatones1, OUTPUT);

    pinMode(pinLedRojoPeatones2, OUTPUT);
    pinMode(pinLedVerdePeatones2, OUTPUT);

    // Establecer estado por defecto de los pines de los LEDs
    digitalWrite(pinLedRojoCoches1, LOW);
    digitalWrite(pinLedAmarilloCoches1, LOW);
    digitalWrite(pinLedVerdeCoches1, LOW);

    digitalWrite(pinLedRojoCoches2, LOW);
    digitalWrite(pinLedAmarilloCoches2, LOW);
    digitalWrite(pinLedVerdeCoches2, LOW);

    digitalWrite(pinLedRojoPeatones1, LOW);
    digitalWrite(pinLedVerdePeatones1, LOW);

    digitalWrite(pinLedRojoPeatones2, LOW);
    digitalWrite(pinLedVerdePeatones2, LOW);

}

void loop() {

    // Configuramos los Semáforos en el modo 1 durante 5 segundos
    configurarSemaforos(false);
    delay(5000);

    // Pasamos al estado de transición 1 durante 2 segundos
    transicionSemaforos(false);
    delay(2000);

    // Configuramos los Semáforos en el modo 2 durante 3 segundos
    configurarSemaforos(true);
    delay(3000);

    // Pasamos al estado de transición 2 durante 1 segundo
    transicionSemaforos(true);
    delay(1000);

}
Vistas
1 Número de vistas
1 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.