// Declaração de pinos para os semáforos dos carros
int carroVermelho = 10;
int carroVerde = 8;
int carroAmarelo = 9;
// Declaração de pinos para os semáforos dos pedestres
int pedestreVermelho = 3;
int pedestreVerde = 2;
// Pino do buzzer
int buzzer = 6;
// Constante para o pino do botão de solicitação de pedestres
const int botao = 7;
// Variável para armazenar o estado atual do botão
int statusBotao = 0;
void setup() {
// Configuração dos pinos como entradas ou saídas
pinMode(carroVermelho, OUTPUT);
pinMode(carroAmarelo, OUTPUT);
pinMode(carroVerde, OUTPUT);
pinMode(pedestreVermelho, OUTPUT);
pinMode(pedestreVerde, OUTPUT);
pinMode(botao, INPUT_PULLUP); // Habilita resistor de pull-up interno
pinMode(buzzer, OUTPUT);
// Inicia a comunicação serial para depuração (opcional)
Serial.begin(9600);
}
void loop() {
// Loop principal
for (int i = 0; i < 900; i++) {
// Semáforo verde para carros e vermelho para pedestres
digitalWrite(carroVermelho, LOW);
digitalWrite(carroVerde, HIGH);
digitalWrite(pedestreVerde, LOW);
digitalWrite(pedestreVermelho, HIGH);
delay(100);
// Verifica o status do botão
statusBotao = digitalRead(botao);
Serial.println(statusBotao); // Imprime o status do botão na porta serial
// Se o botão for pressionado enquanto o semáforo estiver verde para os carros
// e dentro dos primeiros 700 ciclos do loop, chama a função validacao()
if ((statusBotao == LOW) && (i <= 700)) {
validacao();
}
// Após 900 ciclos, alterna para o estado de luz amarela para carros por 6 segundos
// e depois para luz vermelha por 90 segundos, enquanto o buzzer emite um som intermitente
else if (i == 899) {
digitalWrite(carroVerde, LOW);
digitalWrite(carroAmarelo, HIGH);
delay(6000);
digitalWrite(carroAmarelo, LOW);
digitalWrite(carroVermelho, HIGH);
digitalWrite(pedestreVermelho, LOW);
digitalWrite(pedestreVerde, HIGH);
delay(90000);
// Emite som de buzzer intermitente
for (int i = 0; i < 4; ++i) {
tone(4, 329, 1000);
delay(1500);
}
}
}
}
// Função para realizar a validação do botão de solicitação de pedestres
void validacao() {
delay(20000); // Espera 20 segundos
digitalWrite(carroVermelho, LOW);
digitalWrite(carroVerde, LOW);
digitalWrite(carroAmarelo, HIGH); // Luz amarela para os carros
delay(6000);
digitalWrite(carroAmarelo, LOW);
digitalWrite(carroVermelho, HIGH);
digitalWrite(pedestreVermelho, LOW); // Pedestre pode atravessar
digitalWrite(pedestreVerde, HIGH);
delay(25000); // Pedestre tem 25 segundos para atravessar
// Emite som de buzzer intermitente
for (int i = 0; i < 4; ++i) {
tone(4, 329, 1000);
delay(1500);
}
digitalWrite(pedestreVerde, LOW); // Desliga a luz verde para pedestres
digitalWrite(carroVermelho, LOW); // Desliga a luz vermelha para carros
}