#include <PubSubClient.h>
#include <EspMQTTClient.h>
#include <ArduinoJson.h>
#define button1Pin 2 // Pino do botão do semáforo 1
#define button2Pin 4 // Pino do botão do semáforo 2
#define red1Pin 13 // Pino do LED vermelho do semáforo 1
#define yellow1Pin 12// Pino do LED amarelo do semáforo 1
#define green1Pin 14 // Pino do LED verde do semáforo 1
#define red2Pin 27 // Pino do LED vermelho do semáforo 2
#define yellow2Pin 26// Pino do LED amarelo do semáforo 2
#define green2Pin 25 // Pino do LED verde do semáforo 2
EspMQTTClient client(
"Wokwi-GUEST",
"",
"mqtt.eclipseprojects.io",
"talles",
"1223334444",
"semaforo"
);
void mensagemRecebida(const String &topic){
Serial.println(topic);
if(topic == "fecha1"){
// Acender LED amarelo do semáforo 1 por 2 segundos
digitalWrite(yellow1Pin, HIGH);
delay(2000);
digitalWrite(yellow1Pin, LOW);
// Acender LED vermelho do semáforo 1 por 4 segundos
digitalWrite(red1Pin, HIGH);
delay(4000);
digitalWrite(red1Pin, LOW);
// Acender LED amarelo do semáforo 1 por 2 segundos
digitalWrite(yellow1Pin, HIGH);
delay(2000);
digitalWrite(yellow1Pin, LOW);
// Acender LED verde do semáforo 1 por 5 segundos
digitalWrite(green1Pin, HIGH);
delay(5000);
digitalWrite(green1Pin, LOW);
}//if.1
if(topic == "fecha2"){
// Acender LED amarelo do semáforo 2 por 2 segundos
digitalWrite(yellow2Pin, HIGH);
delay(2000);
digitalWrite(yellow2Pin, LOW);
// Acender LED vermelho do semáforo 2 por 4 segundos
digitalWrite(red2Pin, HIGH);
delay(4000);
digitalWrite(red2Pin, LOW);
// Acender LED amarelo do semáforo 2 por 2 segundos
digitalWrite(yellow2Pin, HIGH);
delay(2000);
digitalWrite(yellow2Pin, LOW);
// Acender LED verde do semáforo 2 por 5 segundos
digitalWrite(green2Pin, HIGH);
delay(5000);
digitalWrite(green2Pin, LOW);
}//fim if.1
}//fim MensagemRecebida
void onConnectionEstablished(){
client.subscribe("semaforo", mensagemRecebida);
}
//declaração dos pinos e botões
void setup() {
Serial.begin(115200);
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(red1Pin, OUTPUT);
pinMode(yellow1Pin, OUTPUT);
pinMode(green1Pin, OUTPUT);
pinMode(red2Pin, OUTPUT);
pinMode(yellow2Pin, OUTPUT);
pinMode(green2Pin, OUTPUT);
}
void loop() {
if (digitalRead(button1Pin) == LOW) {
// Acender LED amarelo do semáforo 1 por 2 segundos
digitalWrite(yellow1Pin, HIGH);
delay(2000);
digitalWrite(yellow1Pin, LOW);
// Acender LED vermelho do semáforo 1 por 4 segundos
digitalWrite(red1Pin, HIGH);
delay(4000);
digitalWrite(red1Pin, LOW);
// Acender LED amarelo do semáforo 1 por 2 segundos
digitalWrite(yellow1Pin, HIGH);
delay(2000);
digitalWrite(yellow1Pin, LOW);
// Acender LED verde do semáforo 1 por 5 segundos
digitalWrite(green1Pin, HIGH);
delay(5000);
digitalWrite(green1Pin, LOW);
}
if (digitalRead(button2Pin) == LOW) {
// Acender LED amarelo do semáforo 2 por 2 segundos
digitalWrite(yellow2Pin, HIGH);
delay(2000);
digitalWrite(yellow2Pin, LOW);
// Acender LED vermelho do semáforo 2 por 4 segundos
digitalWrite(red2Pin, HIGH);
delay(4000);
digitalWrite(red2Pin, LOW);
// Acender LED amarelo do semáforo 2 por 2 segundos
digitalWrite(yellow2Pin, HIGH);
delay(2000);
digitalWrite(yellow2Pin, LOW);
// Acender LED verde do semáforo 2 por 5 segundos
digitalWrite(green2Pin, HIGH);
delay(5000);
digitalWrite(green2Pin, LOW);
}
if (digitalRead(red1Pin) == HIGH) {
// Quando o LED vermelho do semáforo 1 está aceso,
// acenda o LED verde do semáforo 2 por 6 segundos
digitalWrite(green2Pin, HIGH);
delay(6000);
digitalWrite(green2Pin, LOW);
}
if (digitalRead(red2Pin) == HIGH) {
// Quando o LED vermelho do semáforo 2 está aceso,
// acenda o LED verde do semáforo 1 por 6 segundos
digitalWrite(green1Pin, HIGH);
delay(6000);
digitalWrite(green1Pin, LOW);
}
}