const int ledPin_rojo = 21; // GPIO del led rojo
const int ledPin_amarillo = 19; // GPIO del led amarillo
const int ledPin_verde = 18; // GPIO del led verde
const int BTN_negro = 12; //GPIO del boton
int i;
bool ON_OFF = false;
bool semaforo_prendido = false;
bool cont = false;
//funcion para definir que funcion se va a realizar con cada elemento
void setup()
{
//mode: INPUT, OUTPUT, or INPUT_PULLUP
pinMode(ledPin_rojo, OUTPUT); //menciona al elemento si es una entrada o salida
pinMode(ledPin_amarillo, OUTPUT);
pinMode(ledPin_verde, OUTPUT);
//menciona que la entrada del pin tiene un resistor integrado, la cual indica la señal cuando es presionado
pinMode(BTN_negro, INPUT_PULLUP);
//es una inicializacion de la comunicacion del canal, entre el arduino y la computadora a una cierta velocidad
Serial.begin(115200);
Serial.println("Simulador de Semaforo");
}
//un loop para que se repita el proceso del semaforo hasta que se apague con el boton
void loop()
{
//Checa si el boton fue presionado o no
ON_OFF = digitalRead(BTN_negro);
// Condicion que indica que el boton fue presionado
if (ON_OFF == LOW && cont == HIGH) {
//Si la condicion se cumple se realiza el sigiente codigo que indica que el semarofo es prendido o no con una funcion de bool
semaforo_prendido = !semaforo_prendido;
}
//contador para saber en que succesion esta (El boton se apreto para prender y apagar)
cont = ON_OFF;
//condicion para realizar el codigo si el boton fue presionado para prender el semaforo
if (semaforo_prendido){
semaforo();
}
}
//funcion del semaforo
void semaforo()
{
Serial.println("Semáforo Rojo");
digitalWrite(ledPin_rojo, HIGH); //High se refiere al nivel del voltaje alto o mayor (en este caso el LED se prende)
digitalWrite(ledPin_amarillo, LOW); //LOW se refiere al nivel del voltaje bajo o menor (se apaga el LED)
digitalWrite(ledPin_verde, LOW);
delay(5000);
Serial.println("Semáforo Verde");
digitalWrite(ledPin_rojo, LOW);
digitalWrite(ledPin_amarillo,LOW);
digitalWrite(ledPin_verde, HIGH);
delay(3500);
for (i = 0; i < 4; i++){
digitalWrite(ledPin_rojo, LOW);
digitalWrite(ledPin_amarillo, LOW);
digitalWrite(ledPin_verde, HIGH);
delay(500);
digitalWrite(ledPin_rojo, LOW);
digitalWrite(ledPin_amarillo, LOW);
digitalWrite(ledPin_verde, LOW);
delay(500);
}
Serial.println("Semáforo Amarillo");
digitalWrite(ledPin_rojo, LOW);
digitalWrite(ledPin_amarillo, HIGH);
digitalWrite(ledPin_verde, LOW);
delay(2000);
}