#include <LiquidCrystal_I2C.h> //biblioteca LCD
unsigned long t=0; //auxilia na contagem de tempo
int modo =0; //modos do sinal
bool ligado=false; //sistema ativado/desativado
int i; //contagem de acionamentos do botão
int ldr=analogRead(33);
static unsigned int brilho=map(ldr, 32, 4095,0,255);
//LCD
LiquidCrystal_I2C lcd(0x27,16,2); //criação de um objeto para controle do lcd (endereço 0x27), com 16 colunas e 2 linhas
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(19, OUTPUT);//led vermelho carros
pinMode(18, OUTPUT);//led amarelo carros
pinMode(17, OUTPUT);//led verde carros
pinMode(23, OUTPUT);//led vermelho pedestre
pinMode(22, OUTPUT);//led verde pedestre
pinMode(16, INPUT_PULLUP); //leitura do botao
pinMode(21, OUTPUT); //buzzer
pinMode(15, OUTPUT); //flash para multa
pinMode(34, INPUT);//potenciometro
pinMode(33,INPUT);//LDR
pinMode(14, OUTPUT);//trigger sensor
pinMode(12, INPUT);//echo sensor
//inicialização do sinal
digitalWrite(17,1);//verde carros ligado
digitalWrite(18,0); //amarelo carros desligado
digitalWrite(19,0);//vermelho carros desligado
digitalWrite(23,1);//vermelho pedestre desligado
digitalWrite(22,0);//verde pedestre desligado
//inicialização do flash(desligado)
digitalWrite(15,0);
//inicialização do buzzer (desligado)
digitalWrite(21,0);
}
void loop() {
unsigned long rep=millis(); //evita repique
//int ldr=analogRead(33);
//unsigned long brilho=map(ldr, 32, 4095,0,255);
int botao = digitalRead(16); //botao
//LDR
//int sensor=analogRead(33);
//static unsigned int brilholed;
//int buzzer = digitalWrite(21); //buzzer
delay(10);
//le ldr uma vez e aplia nos leds de uma vez so
//contrain() garante que fique entre 50-255 sempre
Serial.println(analogRead(33));
//funçao ajusta o modo do sinal (3 modos)
//leitura do botao
if( !ligado && botao==0){ //se o botao for acionado
ligado=true; //sistema foi acionado
t=rep;//tempo=tempo atual
modo=0; //conta o modo 0
tone(21,800,200);
i++;
Serial.println("o botao foi acionado " +String(i)+ " vezes");
/*
if(estadoled)
{
brilholed= map(analogRead(33),32,4063,0,254);
}
Serial.println(analogRead(33));
*/
}
/*
if(!ligado){
Serial.println(analogRead(33));
analogWrite(17, map(analogRead(33), 0, 4095, 0, 255));
analogWrite(23, map(analogRead(33), 0, 4095, 0, 255));
} */
if(ligado){ //começa a ajustar os modos
if(modo==0 && rep - t>=3000) //ir para o modo 1 (amarelo para carros, vermelho para pedestre)
{
digitalWrite(17,0); //desliga led verde carros
digitalWrite(18,1); //liga led amarelo carros
//analogWrite(18,brilho);
//analogWrite(18,brilholed);
t=rep;
modo=1;//conta o modo 1
tone(21,700,200);
//vai do verde para o amarelo
}
if(modo==1 && rep - t>=2000) //modo 2 (vermelho para carros, verde para pedestre)
{
digitalWrite(18,0);//desliga led amarelo carros
digitalWrite(19,1);//liga led vermelho para carros
//analogWrite(19,brilho);
digitalWrite(22,1);//liga led verd pedestre
//analogWrite(22,brilho);
digitalWrite(23,0);//desliga led vermelho pedestre
//analogWrite(19,brilholed);
//analogWrite(22,brilholed);
t=rep;
modo=2;//conta o modo 2
//vai do amarelo para o vermelho
}
if(modo==2) //quando for para o modo 2
{
//logica beeps do buzzer
int tresto= 60000 - (rep - t); //
/*
modo3 -(millis() -t) = tresto;
400 +(tresto / 10) = intervalo;
*/
int intervalo = 400 +(tresto / 10); //
//contador de tempo do sinal vermelho para carros
if(rep % intervalo < 50)
{
tone(21,700,50);
}
if(rep - t>=60000) //modo 3 (vermelho para carros, verde para pedestre)
{
t=rep;
modo=3;//conta o modo 3
//vai do vermelho para o inicial
}
}
if(modo==3 && rep - t>=1000) //volta pro modo 0
{
digitalWrite(17,1); //liga led verde carros
//analogWrite(17,brilho);
digitalWrite(23,1); //liga led vermelho pedestre
//analogWrite(23,brilho);
digitalWrite(19,0); // desliga led vermelho carros
digitalWrite(22,0); //desliga led verde
//analogWrite(17,brilholed);
//analogWrite(23,brilholed);
//modo 0
ligado=false; //sistema foi desligado
t=rep;
modo=0; //volta pro modo 0
}
}
}