// Santiago Vázquez Villarreal A01177850
/*
Sección de variables globales:
En esta sección se definen las variables globales; es decir, las variables que se
se usaran en todas las funciones del código. Como se puede ver aquí se le asigna el
pin digital de salida a cada uno de los focos para poder asi controlar la energía
que se manda a cada uno de ellos para prenderlos o apagarlos.
*/
const int ledPin_rojo = 23; // GPIO del led rojo
const int ledPin_amarillo = 22; // GPIO del led amarillo
const int ledPin_verde = 21; // GPIO del led verde
const int button = 26; //GPIO del boton
/*Sección de función setup:
Se utiliza para configurar los pines, establecer comunicaciones seriales,
inicializar variables y realizar ajustes iniciales que sean esenciales.
Este bloque solo se utiliza una vez al inicio del programa para preparar
el "ambiente" y los recursos del ciclo principal (void loop). En general
"void setup()" tiene la función de configurar el controlador antes de que
se corra el ciclo principal.
*/
void setup()
{
//Definir los puntos de entrada y salida del código
pinMode(ledPin_rojo, OUTPUT);
pinMode(ledPin_amarillo, OUTPUT);
pinMode(ledPin_verde, OUTPUT);
pinMode(button, INPUT);
//Definir la conexión serial a donde se manda la info
Serial.begin(115200);
delay(1000);
Serial.println("Simulador de Semaforo");
}
/*
Sección de función loop:
La función "void loop()" es el corazón del programa, es el codigo que se estará
ejecutando de manera conitnua hasta que se apague la fuente de poder del controlador
Aqui se pueden encontrar las acciones especificas del programa; es decir, aquí
se encuentra el código responsable del funcionamiento del microcontrolador.
Aquí es donde se encuentra la lógica, lectura de sensores, control de actuadores,
tomas de decisiones, etc. En general, el "void loop()" es el responsable de darle
vida a las acciones principales del código, permitiendo que el microcontrolador
realice todo lo que esta programado a hacer.
*/
void loop()
{
//Código representando el funcionamiento de un semáforo real.
//Si la señal del boton es alta, el semáforo está apagado
if(digitalRead(button) == HIGH){
return;
}
//Prender solamente la luz roja
Serial.println("Semáforo en rojo... 5 segundos");
digitalWrite(ledPin_rojo, HIGH);
digitalWrite(ledPin_amarillo, LOW);
delay(5000);
//Prender Solamente el semaforo en verde
Serial.println("Semáforo en verde... ");
digitalWrite(ledPin_rojo,LOW);
digitalWrite(ledPin_verde, HIGH);
delay(5000);
//Ciclo que se encarga de señalar un cambio a luz amarilla
for(int i = 0; i < 3; i++){
digitalWrite(ledPin_verde, LOW);
delay(500);
digitalWrite(ledPin_verde, HIGH);
delay(500);
}
//Prender luz amarilla intermitente señalando un cambio de luz a rojo
Serial.println("Semáforo se va a poner en verde... ");
digitalWrite(ledPin_verde, LOW);
delay(500);
for(int i = 0; i < 3; i++){
digitalWrite(ledPin_amarillo, HIGH);
delay(500);
digitalWrite(ledPin_amarillo, LOW);
delay(500);
}
// se vuelve a llamar a loop => arriba de la función
}