//projecto de semáforo de peatones
/*para esta práctica se parte del código anterior del semáforo de coches.
A partir de esto el semáforo de los peatones estará en verde cuando el de
los coches esté en rojo, y en cualquiera de los otros casos el semáforo de
los peatones estará parpadeando en amarillo*/
/*diferencio además de los colores de los semáforos si
los uso para los coches o para los peatones */
unsigned long tic, tac;
/*referencia de pines según el color del led y el semáforo
color rojo de los coches =23;
color amarillo de los coches =22;
color verde de los coches = 21;
color verde de los peatones =13;
color amarillo de los peatones = 12;*/
void setup() {
Serial.begin(115200);
Serial.println("Empieza la secuencia de semáforo");
pinMode(23, OUTPUT); //inicialiciamos los pines de los leds como pines de salida
pinMode(22, OUTPUT);
pinMode(21, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
/*creo una función externa secuencia_luces a la que puedo llamar desde el programa en
void loop (). Para esta funcion es necesario indicar un tiempo y los pines que se
deben encender*/
/*el primer valor es el tiempo que tiene que estar encendido los leds. El segundo y
tercer número son los leds del semáforo de los coches que se debe encender. El úlitmo
número es el led de los peatones que se debe encender*/
void secuencia_luces ( unsigned long tiempo_espera, int ledpin1, int ledpin2, int ledpinp)
{
tic=millis();
do {
tac=millis();
digitalWrite(ledpin1, HIGH);
digitalWrite(ledpin2, HIGH);
/*si el pin seleccionado en la función es el 12, el led amarillo de los peatones
tenemos que no solo se tiene que encender sino que tiene que parpadear*/
if (ledpinp==12){
Serial.println("dentro del if ");
digitalWrite(ledpinp, HIGH);
delay(250);
digitalWrite(ledpinp, LOW);
delay(250);
} else {
digitalWrite(ledpinp, HIGH);
}
} while ((tac-tic) < tiempo_espera);
digitalWrite(ledpin1, LOW);
digitalWrite(ledpin2, LOW);
digitalWrite(ledpinp, LOW);
}
/*cuando se enciende el rojo de los coches se enciende el verde de
los peatones
cuando se enciende el amarillo o verde de coches el de peatones
parpadea en amarillo*/
void loop() {
//durante 5s led rojo de los coches encendido y led verde de los peatones
secuencia_luces (5000,23,0,13);
/*durante 2s leds verde y amarillo de los coches encendido y
led amarillo de los peatones encendido*/
secuencia_luces (2000,23,22,12);
//durante 5s led verde de coches encendido y led amarillo de peatones
secuencia_luces(5000,21,0,12);
/*durante 2s leds verde y amarillo de los coches encendidos y led
amarillo de los peatones encendido*/
secuencia_luces(2000,21,22,12);
}