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