¿En que puertos están conectados los leds (verde, amarillo, rojo)?
¿Cuál es el bloque utilizado para encender los leds?
¿Cómo hago para que el led verde realice un parpadeo o intermitencia 3 veces?
¿Qué significan los colores de los cables 3 pin (negro, rojo y amarillo)?
Replica la programación del semáforo y agrega la captura de pantalla.​

Respuestas

Respuesta dada por: LeonardoDY
14

En este caso de programación de un semáforo, los LEDs están conectados en puertos configurados como General Purpose Input Output (GPIO). los cuales son a elección y son previamente configurados como salidas mediante el comando pinMode(PORT,OUTPUT) donde PORT es el número del puerto.

El bloque utilizado para encender los LEDs es el bloque que comanda a esos puertos definido por las funciones digitalWrite(PORT,GPIO_HIGH) para encenderlo y digitalWrite(PORT,GPIO_LOW) para apagarlo.

Así, para que el led verde haga un parpadeo o intermitencia 3 veces puedo hacer un lazo que se ejecute 3 veces.

if(flag==0){

   for(int i=0;i<3;i++){

      digitalWrite(GREEN_PORT,GPIO_HIGH);

      delay(1000);

      digitalWrite(GREEN_PORT,GPIO_LOW);

      delay(1000);

  }

  flag=1;

}

Donde la función del flag es que el LED no repita los 3 parpadeos cíclicamente al dar vueltas en el ciclo principal del programa. La función delay() produce una demora y recibe el parámetro en milisegundos, debe tenerse en cuenta que recurre a lazos bloqueantes que mientras duran detienen por completo la ejecución del programa.

En cuanto a los cables 3 pin, estos son cables de alimentación para ventiladores, el cable negro es GND o masa, el cable rojo es el positivo de la alimentación de 12V o 5V, y el cable amarillo es la señal del tacómetro enviada por el ventilador que indica la velocidad del mismo.

Y si solo necesitamos programar un semáforo, una programación posible puede ser:

loop()

{

          digitalWrite(RED_PORT,GPIO_HIGH);

          digitalWrite(YELLOW_PORT,GPIO_LOW);

          digitalWrite(GREEN_PORT,GPIO_LOW);

          delay(45000);//Ciclo del rojo

          digitalWrite(RED_PORT,GPIO_HIGH);

          digitalWrite(YELLOW_PORT,GPIO_HIGH);

          digitalWrite(GREEN_PORT,GPIO_LOW);

          delay(5000);//Ciclo del amarillo viniendo del rojo, prende rojo y amarillo simultaneamente

          digitalWrite(RED_PORT,GPIO_LOW);

          digitalWrite(YELLOW_PORT,GPIO_LOW);

          digitalWrite(GREEN_PORT,GPIO_HIGH);

          delay(45000);//Ciclo del verde

           digitalWrite(RED_PORT,GPIO_LOW);

          digitalWrite(YELLOW_PORT,GPIO_HIGH);

          digitalWrite(GREEN_PORT,GPIO_LOW);

          delay(5000);//Amarillo viniendo del verde, solo preende el amarillo

//Vuelve al rojo al retomar el lazo principal.

}

Una vez más, debe tenerse en cuenta que los comandos delay() producen demoras a través de lazos bloqueantes. Algoritmos basados en los temporizadores del microcontrolador se pueden utilizar para evitar afectar otras tareas que el programa pueda estar ejecutando.

Preguntas similares