int carroVermelho = 0; 
int carroAmarelo = 4; 
int carroVerde = 16; 
int pessoaVerde = 2;
int pessoaVermelho = 15; 
int botao = 5;
int tempoAtravessando = 5000;
unsigned long mudaTempo;
 
void setup() {
  
  // Inicializamos o temporizador aqui
  // Observe que o "contador" foi atrelado
  // a váriavel que setamos acima.
  
  mudaTempo = millis();
  

  pinMode(carroVermelho, OUTPUT);
  pinMode(carroAmarelo, OUTPUT);
  pinMode(carroVerde, OUTPUT);
  pinMode(pessoaVermelho, OUTPUT);
  pinMode(pessoaVerde, OUTPUT);
  pinMode(botao, INPUT);
  
  //Começamos deixando acesas as luzes: verde (referente aos veículos) e vermelha (referente aos pedestres)
  //OBS: O comando "Serial.begin" utilizado abaixo serve neste caso como uma espécie de "DEBUG", isto porque
  //com este comando somos capazes de "acompanhar" o funcionamento do circuito pelo Painel Serial da IDE do Arduino!
  
  digitalWrite(carroVerde, HIGH);
  digitalWrite(pessoaVermelho, HIGH);
  digitalWrite(carroVermelho, LOW);
  digitalWrite(carroAmarelo, LOW);
  digitalWrite(pessoaVerde, LOW);
  Serial.begin(9600);
}
 
void loop() {
  
  // A variável que vamos setar abaixo servirá para "guardar" o estado do nosso botão (pressionado ou não pressionado)
  
  int estado = digitalRead(botao);
  delay(50);
  Serial.println(estado);
  
  // Se o botão está sendo pressionado E se já passou 5 segundos desde a última pressão.
  
  if (estado == HIGH && (millis() - mudaTempo) > 5000) {
    
    //Então SE SIM, executa a função de mudar o estado das luzes abaixo:
    mudaLuzes();
  }
}
 
void mudaLuzes() {
  digitalWrite(carroVerde, LOW);    // A luz verde é desligada
  digitalWrite(carroAmarelo, HIGH); // A luz amarela vai ligar por 4 segundos
  delay(4000); 
  
  digitalWrite(carroAmarelo, LOW); // A luz amarela vai desligar
  digitalWrite(carroVermelho, HIGH); // A luz vermelha vai ligar por 5 segundos
 
  digitalWrite(pessoaVermelho, LOW);
  digitalWrite(pessoaVerde, HIGH);
  delay(tempoAtravessando);
  
  // Pisca a luz verde dos PEDESTRES
  for (int x=0; x<10; x++) {
    digitalWrite(pessoaVerde, LOW);
    delay(160);
    digitalWrite(pessoaVerde, HIGH);
    delay(160);
  }
  digitalWrite(pessoaVerde, LOW);
  digitalWrite(carroVermelho, LOW);
  digitalWrite(pessoaVermelho, HIGH);
  digitalWrite(carroVerde, HIGH);
 
  mudaTempo = millis();
 }
$abcdeabcde151015202530fghijfghij