#include <Servo.h>
// ================================
// Definição dos pinos
// ================================
int ledVerdeCarro = 3;
int ledAmareloCarro = 2;
int ledVermelhoCarro = 1;
int ledVerdePedestre = 5;
int ledVermelhoPedestre = 6;
int botao = 4;
int pinoServo = 9; // Pino do sinal do Servo (fio verde na sua imagem)
Servo cancela; // Cria o objeto para controlar o servo
// Posições da cancela em graus
int cancelaAberta = 90;
int cancelaFechada = 0;
// ================================
// Configuração inicial
// ================================
void setup() {
pinMode(ledVerdeCarro, OUTPUT);
pinMode(ledAmareloCarro, OUTPUT);
pinMode(ledVermelhoCarro, OUTPUT);
pinMode(ledVerdePedestre, OUTPUT);
pinMode(ledVermelhoPedestre, OUTPUT);
pinMode(botao, INPUT_PULLUP);
cancela.attach(pinoServo); // Conecta o servo ao pino 9
// Estado inicial: Semáforo aberto para carros, cancela levantada
digitalWrite(ledVerdeCarro, HIGH);
digitalWrite(ledVermelhoPedestre, HIGH);
cancela.write(cancelaAberta);
}
// ================================
// Loop principal
// ================================
void loop() {
// Verifica se o botão foi pressionado
if (digitalRead(botao) == LOW) {
// Pequeno tempo de espera antes da troca
delay(1000);
// Carro: verde -> amarelo
digitalWrite(ledVerdeCarro, LOW);
digitalWrite(ledAmareloCarro, HIGH);
delay(2000);
// Carro: amarelo -> vermelho
digitalWrite(ledAmareloCarro, LOW);
digitalWrite(ledVermelhoCarro, HIGH);
// FECHA A CANCELA
cancela.write(cancelaFechada);
delay(500); // Aguarda meio segundo para a cancela terminar de descer
// Pedestre: vermelho -> verde
digitalWrite(ledVermelhoPedestre, LOW);
digitalWrite(ledVerdePedestre, HIGH);
// Tempo para atravessar
delay(5000);
// Pisca o verde do pedestre
for (int i = 0; i < 5; i++) {
digitalWrite(ledVerdePedestre, LOW);
delay(500);
digitalWrite(ledVerdePedestre, HIGH);
delay(500);
}
// Fecha passagem do pedestre
digitalWrite(ledVerdePedestre, LOW);
digitalWrite(ledVermelhoPedestre, HIGH);
// Libera carros novamente
digitalWrite(ledVermelhoCarro, LOW);
digitalWrite(ledVerdeCarro, HIGH);
// ABRE A CANCELA
cancela.write(cancelaAberta);
// Evita múltiplos acionamentos
delay(1000);
}
}