Semáforo de veículos e pedestres com Arduino

Usando o Arduino, é possível criar um semáforo de veículos e pedestres controlado eletronicamente, com sensores de presença e lógica de programação para alternar entre os sinais vermelho e verde, garantindo a segurança no trânsito.

Este código controla um semáforo com três LEDs para veículos e dois LEDs para pedestres. Quando o botão táctil é pressionado, o LED verde para veículos é desligado e o LED amarelo para veículos é ligado. O LED vermelho para veículos é desligado e o LED verde para pedestres é desligado. O LED vermelho para pedestres é ligado e permanece assim durante 3 segundos. Em seguida, os LEDs são redefinidos para a condição inicial e o LED verde para pedestres pisca por 5 vezes. Por fim, o LED verde para veículos é ligado e o LED vermelho para pedestres é ligado e permanece assim durante 5 segundos. Se o botão táctil não for pressionado, o LED verde para veículos é ligado e o LED vermelho para pedestres é ligado.

//Inicio do código
 
//Declaração das variáveis
int ledVermelhoV = 2; // LED vermelho para veículos
int ledAmareloV = 3; // LED amarelo para veículos
int ledVerdeV = 4; // LED verde para veículos
int ledVermelhoP = 8; // LED vermelho para pedestres
int ledVerdeP = 9; // LED verde para pedestres
int botaoTactil = 6; // Botão táctil para pedestres

void setup() {
  pinMode(ledVermelhoV, OUTPUT); // Configura o LED vermelho para veículos como saída
  pinMode(ledAmareloV, OUTPUT); // Configura o LED amarelo para veículos como saída
  pinMode(ledVerdeV, OUTPUT); // Configura o LED verde para veículos como saída
  pinMode(ledVermelhoP, OUTPUT); // Configura o LED vermelho para pedestres como saída
  pinMode(ledVerdeP, OUTPUT); // Configura o LED verde para pedestres como saída
  pinMode(botaoTactil, INPUT); // Configura o botão táctil para pedestres como entrada
  
  digitalWrite(ledVerdeV, HIGH); // Liga o LED verde para veículos
  digitalWrite(ledAmareloV, LOW); // Desliga o LED amarelo para veículos
  digitalWrite(ledVermelhoV, LOW); // Desliga o LED vermelho para veículos
    
  digitalWrite(ledVermelhoP, HIGH); // Liga o LED vermelho para pedestres
  digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
}

void loop() {
  if (digitalRead(botaoTactil) == 1) { // Verifica se o botão táctil foi pressionado
    
    digitalWrite(ledVerdeV, LOW); // Desliga o LED verde para veículos
    digitalWrite(ledAmareloV, HIGH); // Liga o LED amarelo para veículos
    digitalWrite(ledVermelhoV, LOW); // Desliga o LED vermelho para veículos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    digitalWrite(ledVermelhoP, HIGH); // Liga o LED vermelho para pedestres
    delay(3000); // Espera 3 segundos

    // Condição inicial dos LEDs
    digitalWrite(ledVerdeV, LOW); // Desliga o LED verde para veículos
    digitalWrite(ledAmareloV, LOW); // Desliga o LED amarelo para veículos
    digitalWrite(ledVermelhoV, HIGH); // Liga o LED vermelho para veículos
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    digitalWrite(ledVermelhoP, LOW); // Desliga o LED vermelho para pedestres
    delay(10000); // Espera 10 segundos

    // Alerta para o pedestre - Pisca 5x
    // 1x
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    // 2x
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    // 3x
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    // 4x
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    // 5x
    digitalWrite(ledVerdeP, HIGH); // Liga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(500); // Espera 0,5 segundos

    // Fecha semáforo para pedestre e abre para veículos
    digitalWrite(ledVerdeV, HIGH); // Liga o LED verde para veículos
    digitalWrite(ledAmareloV, LOW); // Desliga o LED amarelo para veículos
    digitalWrite(ledVermelhoV, LOW); // Desliga o LED vermelho para veículos
    
    digitalWrite(ledVermelhoP, HIGH); // Liga o LED vermelho para pedestres
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    delay(5000); // Espera 5 segundos
  }
  if (digitalRead(botaoTactil) == 0) { // Se o botão táctil não foi pressionado
    
    digitalWrite(ledVerdeV, HIGH); // Liga o LED verde para veículos
    digitalWrite(ledAmareloV, LOW); // Desliga o LED amarelo para veículos
    digitalWrite(ledVermelhoV, LOW); // Desliga o LED vermelho para veículos
    
    digitalWrite(ledVerdeP, LOW); // Desliga o LED verde para pedestres
    digitalWrite(ledVermelhoP, HIGH); // Liga o LED vermelho para pedestres
  }
}
//Fim do código

Veja um exemplo no TinkerCAD utilizado na Live

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *