int rojocoches = 9;
int ambarcoches = 8;
int verdecoches = 7;
int verdepeatones = 3;
int rojopeatones = 2;
int pulsador = 13;
enum EstadoSemaforo { Rojo, Ambar, Verde };
// Enumeramos los estados del semáforo.
void setup(){
pinMode(rojocoches, OUTPUT);
pinMode(ambarcoches, OUTPUT);
pinMode(verdecoches, OUTPUT);
pinMode(verdepeatones, OUTPUT);
pinMode(rojopeatones, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
/* El INPUT_PULLUP sirve invertir el pulsador. En este estado siempre
estará pulsado, es decir, siempre registrará un 1 en vez de un 0.
A su vez nos ahorramos una resistencia. */
void SemaforoCoche(EstadoSemaforo Luz);
void SemaforoPeaton(EstadoSemaforo Luz);
/* Creamos el comando con el que queremos que se registren las luces
de los semáforos. "Pon SemaforoCoche/SemaforoPeaton en tal color de luz". */
void loop(){
SemaforoCoche(Verde);
SemaforoPeaton(Rojo);
if (!digitalRead(pulsador)){ // Utilizamos "!" para negar una condición.
SemaforoCoche(Ambar);
delay(1000);
SemaforoCoche(Rojo);
SemaforoPeaton(Verde);
delay(2000);
}
}
/* Este es el loop que permite que el semáforo se quede en verde para los
coches y enrojo para los peatones. Para salir de este loop vamos a crear
la siguientes funciones. */
void SemaforoCoche(EstadoSemaforo Luz){
switch(Luz){
case Verde:
digitalWrite(rojocoches, LOW);
digitalWrite(ambarcoches, LOW);
digitalWrite(verdecoches, HIGH);
break;
case Rojo:
digitalWrite(rojocoches, HIGH);
digitalWrite(ambarcoches, LOW);
digitalWrite(verdecoches, LOW);
break;
case Ambar:
digitalWrite(rojocoches, LOW);
digitalWrite(ambarcoches, HIGH);
digitalWrite(verdecoches, LOW);
break;
default:
digitalWrite(rojocoches, LOW);
digitalWrite(ambarcoches, LOW);
digitalWrite(verdecoches, LOW);
break;
}
/* El "break" se utiliza en los casos en los que queremos queel código
solo se lea hasta ese punto, que se envíe el comando justo hasta el
"break" y que salte al siguiente comando o corchete */
/*
if (Luz == Verde){
digitalWrite(rojocoche, LOW);
digitalWrite(ambarcoche, LOW);
digitalWrite(verdecoche, HIGH);
}else if (Luz == Rojo){
digitalWrite(rojocoche, HIGH);
digitalWrite(ambarcoche, LOW);
digitalWrite(verdecoche, LOW);
}else{
digitalWrite(rojocoche, LOW);
digitalWrite(ambarcoche, HIGH);
digitalWrite(verdecoche, LOW);
}*/
}
void SemaforoPeaton(EstadoSemaforo Luz){
if(Luz == Verde){ // El == es si ocurre esa codición.
digitalWrite(verdepeatones, HIGH);
digitalWrite(rojopeatones, LOW);
} else {
digitalWrite(verdepeatones, LOW);
digitalWrite(rojopeatones, HIGH);
}
}