int led2=2;
int led3=3;
int led4=4;
void setup(){
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
}
void loop(){
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
delay(8000);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
delay(2000);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
delay(8000);
}
Este con millis
unsigned long ultimosMilisegundos = 0,
milisegundosActuales;
int ledRojo = 7,
ledAmarillo = 8,
ledVerde = 9,
SEGUNDOS_DE_ESPERA_VERDE_Y_ROJO = 10 * 10000, //
SEGUNDOS_DE_ESPERA_AMARILLO = 2 * 1000, //
LED_ACTUAL = 0; // Por defecto no hay led encendido
void setup() {
pinMode(ledRojo, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
}
void loop() {
semaforo();
}
void semaforo() {
milisegundosActuales = millis(); // Obtenemos los milisegundos actuales
switch (LED_ACTUAL) {
case 9:
if (elTurnoDeVerdeORojoHaTerminado())
cambiaA(ledAmarillo);
break;
case 8:
if (elTurnoDeAmarilloHaTerminado())
cambiaA(ledRojo);
break;
case 7:
if (elTurnoDeVerdeORojoHaTerminado())
cambiaA(ledVerde);
break;
default:
cambiaA(ledVerde);
break;
}
}
boolean elTurnoDeVerdeORojoHaTerminado() {
if (milisegundosActuales - ultimosMilisegundos >= SEGUNDOS_DE_ESPERA_VERDE_Y_ROJO) {
ultimosMilisegundos = milisegundosActuales;
return true;
}
return false;
}
boolean elTurnoDeAmarilloHaTerminado() {
if (milisegundosActuales - ultimosMilisegundos >= SEGUNDOS_DE_ESPERA_AMARILLO) {
ultimosMilisegundos = milisegundosActuales;
return true;
}
return false;
}
void cambiaA(int nuevoLed) {
digitalWrite(LED_ACTUAL, LOW);
LED_ACTUAL = nuevoLed;
digitalWrite(LED_ACTUAL, HIGH);
}
ESTOS SON LOS PROGRAMAS QUE UTILICE