/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
// Define os pinos usados para cada LED do semáforo veicular
int red = 12;
int yellow = 13;
int green = 14;
// Define os pinos usados para cada LED do semáforo do pedestre
int redPedestrian = 26;
int greenPedestrian = 27;
// Define o pino usado para o acionamento do botão
int button = 34;
// Define se o botão foi pressionado
bool isButtonPressed = false;
// Display 7 segmentos
int display[] = {19, 21, 15, 2, 4, 18, 5};
// Números para display de 7SEG
int numbers[][7] = {
{0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 1, 1, 1, 1},
{0, 0, 1, 0, 0, 1, 0},
{0, 0, 0, 0, 1, 1, 0},
{1, 0, 0, 1, 1, 0, 0},
{0, 1, 0, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 0}
};
void countdown(int number) {
for (int i = number; i >= 0; i--) {
for (int j = 0; j < 7; j++) {
digitalWrite(display[j], numbers[i][j] == 0 ? LOW : HIGH);
}
delay(1000);
}
}
void turnRed() {
// Sinal amarelo
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
delay(1500);
// Sinal verde para pedestre
digitalWrite(redPedestrian, LOW);
digitalWrite(greenPedestrian, HIGH);
// Sinal vermelho
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
// delay(3000);
countdown(9);
isButtonPressed = false;
}
void buttonHasPressed() {
if (!isButtonPressed) {
isButtonPressed = true;
}
}
void setup() {
// Configura os pinos como saída
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(redPedestrian, OUTPUT);
pinMode(greenPedestrian, OUTPUT);
// Configura a interrupção do botão
attachInterrupt(button, buttonHasPressed, FALLING);
// Configure o display 7 segmentos
for (int i = 0; i < 7; i++) {
pinMode(display[i], OUTPUT);
digitalWrite(display[i], HIGH);
}
}
void turnGreen() {
// Carro
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
// Pedestre
digitalWrite(greenPedestrian, LOW);
digitalWrite(redPedestrian, HIGH);
}
void loop() {
if (isButtonPressed) {
turnRed();
} else {
turnGreen();
}
}