#include <WiFi.h>
#include <HTTPClient.h>
long tempoAnterior = 0;
long tempoAnterior2 = 0;
long tempoAnterior3 = 0;
long tempoAnterior4 = 0;
long tempo = 1000;
long tempo2 = 3000;
long tempo3 = 2000;
long tempo4 = 5000;
unsigned long ultimoDebounce = 0;
unsigned long debounceDelay = 200;
int contadorBotoes = 0; // Contador para pressionamentos do botão
#define led_verde 2
#define led_amarelo 9
#define led_vermelho 40
#define botaoPino 18
#define ldrPino 4
int threshold = 600;
// Conexão Wi-Fi
void conectarWiFi() {
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
}
// Requisição HTTP
void fazerRequisicaoHTTP() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = "http://www.google.com.br/";
http.begin(serverPath);
int httpRequisicao = http.GET();
if (httpRequisicao > 0) {
Serial.print("HTTP Response do código: ");
Serial.println(httpRequisicao);
} else {
Serial.print("Erro do código: ");
Serial.println(httpRequisicao);
}
http.end();
} else {
Serial.println("WiFi desconectado.");
}
}
void setup() {
Serial.begin(9600);
pinMode(led_verde, OUTPUT);
pinMode(led_amarelo, OUTPUT);
pinMode(led_vermelho, OUTPUT);
pinMode(botaoPino, INPUT);
pinMode(ldrPino, INPUT);
digitalWrite(led_verde, LOW);
digitalWrite(led_amarelo, LOW);
digitalWrite(led_vermelho, LOW);
conectarWiFi();
}
void loop() {
int ldrStatus = analogRead(ldrPino);
unsigned long tempoAtual = millis();
int estadoBotao = digitalRead(botaoPino);
// Controle do botão com debounce
if (estadoBotao == LOW && (tempoAtual - ultimoDebounce) > debounceDelay) {
ultimoDebounce = tempoAtual; // Atualiza o tempo do debounce
contadorBotoes++; // Incrementa contador de pressionamentos
if (contadorBotoes == 3) {
// Aciona LED vermelho e envia requisição HTTP
digitalWrite(led_vermelho, HIGH);
fazerRequisicaoHTTP();
delay(5000); // Mantém LED vermelho aceso por 5 segundos
digitalWrite(led_vermelho, LOW);
contadorBotoes = 0; // Reseta contador
}
}
// Controle do semáforo baseado na luz ambiente
if (ldrStatus <= threshold) {
// Está escuro: LED amarelo piscando
if (tempoAtual - tempoAnterior >= tempo) {
tempoAnterior = tempoAtual;
digitalWrite(led_amarelo, !digitalRead(led_amarelo)); // Alterna estado
}
digitalWrite(led_verde, LOW);
digitalWrite(led_vermelho, LOW);
} else {
// Está claro: lógica do semáforo
digitalWrite(led_amarelo, LOW);
if (tempoAtual - tempoAnterior2 < tempo2) {
digitalWrite(led_verde, HIGH);
} else if (tempoAtual - tempoAnterior2 < tempo2 + tempo3) {
digitalWrite(led_verde, LOW);
digitalWrite(led_amarelo, HIGH);
} else if (tempoAtual - tempoAnterior2 < tempo2 + tempo3 + tempo4) {
digitalWrite(led_amarelo, LOW);
digitalWrite(led_vermelho, HIGH);
} else {
tempoAnterior2 = tempoAtual; // Reinicia o ciclo
}
}
}