Actividad 4: Solicitud de cambio con Pulsadores

Actividad 4

 

Solicitud de cambio con Pulsadores

Esta actividad consiste en implementar dos pulsadores para solicitar el cambio de estado de los Semáforos. Estos pulsadores simularán los que podemos encontrar en algunos semáforos de la vida real donde el peatón puede solicitar el paso, para lo cual los semáforos cambian de estado. Necesitarás el siguiente material:

  • 2 x Pulsadores.

  • 2 x Resistencias de 10K Ohm.

El esquema de montaje es el siguiente:


 

 

Las conexiones del Arduino son las siguientes:

  • Pulsador 1: Pin A0.

  • Pulsador 2: Pin A1.

Ambos pulsadores están configurados en Pull Down con una resistencia de 10K Ohm.

Debemos programar el Arduino para que los Semáforos cambien de estado inmediatamente cuando se solicite el paso por el accionamiento de uno de los pulsadores.

Recuerda que para utilizar un LED debemos configurar el Pin donde está conectado como Entrada en el SetUp del código Arduino utilizando la función:

pinMode(pin, modo);
Recuerda que para leer el estado de un Pin digital debemos utilizar la siguiente función:

digitalRead(pin);

donde "pin" es el número del Pin que queremos leer. La función puede devolver "HIGH" o "LOW" según la tensión que se encuentre presente en ese momento en dicho Pin.
Para hacer una programación segura del Puente Levadizo teniendo en cuenta la posición de la plataforma, deberemos utilizar condicionales de múltiples condiciones. Aunque podemos emplear un condicional dentro de otro, es más acertado emplear la concatenación de condiciones. Esto se hace de la siguiente manera:

if(condición 1 && condición 2) {

// Líneas a ejecutar si se cumplen ambas condiciones

}

donde "condición 1" y "condición 2" están concatenadas con el operador condicional "&&" o "Y". Este condicional ejecuta las líneas encerradas entre los corchetes solamente cuando se cumplan o sean ciertas ambas condiciones "condición 1" y "condición 2".

Otro operador de este tipo muy común es "||" o "O", que permite ejecutar las líneas próximas si se cumple alguna de las condiciones "condición 1" o "condición 2".


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

int pinPulsador1 = A0; // Pin del Pulsador 1 para controlar configuración 1
int pinPulsador2 = A1; // Pin del Pulsador 2 para controlar configuración 2

void configurarSemaforos(bool configuracion) {

    // Primera configuración de los semáforos (ESTADO 1)
    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 { // (ESTADO 3)

        // 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 (ESTADO 2)
    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 { // (ESTADO 4)

        // 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);

    }

}

// Variable para conocer el ESTADO en el que se encuentran los semáforos
int estado = 0;

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 pulsadores
    pinMode(pinPulsador1, INPUT);
    pinMode(pinPulsador2, INPUT);

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

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

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

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

    estado = 1;

}

void loop() {

    if((digitalRead(pinPulsador1) == HIGH) && (digitalRead(pinPulsador2) == LOW)) {
        if(estado == 3) {

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

            // Configuramos los Semáforos en el ESTADO 1
            configurarSemaforos(false);
            estado = 1;

        }
    }

    if((digitalRead(pinPulsador2) == HIGH) && (digitalRead(pinPulsador1) == LOW)) {
        if(estado == 1) {

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

            // Configuramos los Semáforos en el ESTADO 3
            configurarSemaforos(true);
            estado = 3;

        }
    }

}
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.