Aqui fica um melhoramento a este código e agora com push button para os peões. Ainda não vi nada na internet que esteja como eu fiz este projecto, uma vez que o semáforo flui com os tempos normais ficando verde e vermelho e apenas diminui os tempos caso alguém carregue no botão... Mais uma vez deixo o vídeo e o código...
Video:
Código:
// set pin Numbers
int CGL = 11; // CAR GREEN LIGHT
int CYL = 12; // CAR YELLOW LIGHT
int CRL = 13; // CAR RED LIGHT
int PRL = 9; // PAWN RED LIGHT
int PGL = 8; // PAWN GREEN LIGHT
long lastmillis;
int y;
int buttonPin = 7;
void setup()
{
pinMode(CGL,OUTPUT);
pinMode(CYL,OUTPUT);
pinMode(CRL,OUTPUT);
pinMode(PRL,OUTPUT);
pinMode(PGL,OUTPUT);
delay(1000); // Gerar um atraso no arranque do circuito -> Para melhor Visualização
digitalWrite(PRL,HIGH);
digitalWrite(CGL,HIGH);
digitalWrite(PGL,LOW); // LEDs por defeito estão no estado LOW. Coloquei assim apenas para garantir o correcto funcionamento.
digitalWrite(CYL,LOW);
}
void loop()
{
digitalWrite(PRL,HIGH);
delay(500);
digitalWrite(CRL,LOW);
digitalWrite(CGL,HIGH);
{
y = digitalRead(buttonPin);
lastmillis = millis();
}
while((millis()-lastmillis) <2000);
if(y==HIGH)
{
digitalWrite(CGL,LOW);
digitalWrite(CYL,HIGH);
delay(500);
digitalWrite(CYL,LOW);
digitalWrite(CRL,HIGH);
delay(500);
digitalWrite(PGL,HIGH);
digitalWrite(PRL,LOW);
delay(5000); // Começa o verde dos peoes a piscar
digitalWrite(PGL,LOW);
delay(500);
digitalWrite(PGL,HIGH);
delay(500);
digitalWrite(PGL,LOW);
delay(500);
digitalWrite(PGL,HIGH);
delay(500); // Acaba de piscar
digitalWrite(PGL,LOW);
}
else
{
delay(5000);
digitalWrite(CGL,LOW);
digitalWrite(CYL,HIGH);
delay(500);
digitalWrite(CYL,LOW);
digitalWrite(CRL,HIGH);
delay(500);
digitalWrite(PGL,HIGH);
digitalWrite(PRL,LOW);
delay(3000); // Começa o verde dos peoes a piscar
digitalWrite(PGL,LOW);
delay(500);
digitalWrite(PGL,HIGH);
delay(500);
digitalWrite(PGL,LOW);
delay(500);
digitalWrite(PGL,HIGH);
delay(500); // Acaba de piscar
digitalWrite(PGL,LOW);
}
}