// Adicionar Pisca para o vermelho do pedestre.
#define Vm_c 21
#define Am_c 19
#define Vd_c 18
#define Botao 25
#define Pedestre_VM 4
#define Pedestre_VD 2
int flagSemaforo;
int StatusBotao; //verificar o estado anterior do botao
int Pisca;
int flagPisca;
void setup()
{
pinMode(Vm_c, OUTPUT);
pinMode(Am_c, OUTPUT);
pinMode(Vd_c, OUTPUT);
pinMode(Botao, INPUT);
pinMode(Pedestre_VM, OUTPUT);
pinMode(Pedestre_VD, OUTPUT);
flagSemaforo = 1;
StatusBotao = digitalRead(Botao); // verificar botao
Pisca = 0;
flagPisca = HIGH;
}
void loop()
{
int flagBotao;
flagBotao = digitalRead(Botao);
// Borda de subida e de descida.
if ((flagBotao == HIGH) && (StatusBotao == LOW)) // atribuir nova verificação do estado anterior do botao.
{
if (flagSemaforo < 4)
{
flagSemaforo = flagSemaforo + 1;
}
else
{
flagSemaforo = 1;
}
delay(100);
}
StatusBotao = flagBotao;
if (flagSemaforo == 1)
{
digitalWrite(Vd_c, HIGH);
digitalWrite(Am_c, LOW);
digitalWrite(Vm_c, LOW);
digitalWrite(Pedestre_VD, LOW);
digitalWrite(Pedestre_VM, HIGH);
}
if (flagSemaforo == 2)
{
digitalWrite(Vd_c, LOW);
digitalWrite(Am_c, HIGH);
digitalWrite(Vm_c, LOW);
digitalWrite(Pedestre_VD, LOW);
digitalWrite(Pedestre_VM, HIGH);
}
if (flagSemaforo == 3)
{
digitalWrite(Vd_c, LOW);
digitalWrite(Am_c, LOW);
digitalWrite(Vm_c, HIGH);
digitalWrite(Pedestre_VD, HIGH);
digitalWrite(Pedestre_VM, LOW);
}
if (flagSemaforo == 4) // Pisca Semaforo VM Pedestre.
{
digitalWrite(Vd_c, LOW);
digitalWrite(Am_c, LOW);
digitalWrite(Vm_c, HIGH);
Pisca = Pisca + 1;
if (Pisca == 400)
{
flagPisca = !flagPisca;
Pisca = 0;
}
digitalWrite(Pedestre_VD, LOW);
digitalWrite(Pedestre_VM, flagPisca);
}
delay(1);
}