#include <LiquidCrystal_I2C.h>
#include <Wire.h>
int Red = 13; // estabelece o semáforo para carros
int Yellow = 14;
int Green = 15;
int pedvermelho = 4; // estabelece o semáforo para pedestres
int pedverde = 5;
int botao = 12; //acionamento para pedestre
int travessia = 20000; // tempo para que os pedestres atravessem (10 segundos)
unsigned long changeTime; // tempo desde que o botão foi pressionado
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinos7seg[] = {33, 23, 25, 19, 32, 26, 27};
//a,b,c,d,e,f,g
bool disp7seg[11][7] = { {1, 1, 1, 1, 1, 1, 1}, //nada
{0, 1, 1, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1}, //2
{1, 1, 1, 1, 0, 0, 1}, //3
{0, 1, 1, 0, 0, 1, 1}, //4
{1, 0, 1, 1, 0, 1, 1}, //5
{1, 0, 1, 1, 1, 1, 1}, //6
{1, 1, 1, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 0, 0, 1, 1}, //9
{1, 1, 1, 1, 1, 1, 0}
}; //0 };
void setup() {
lcd.init();
lcd.backlight();
pinMode(33, OUTPUT);
pinMode(23, OUTPUT);
pinMode(25, OUTPUT);
pinMode(19, OUTPUT);
pinMode(32, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(pedverde, OUTPUT);
pinMode(pedvermelho, OUTPUT);
pinMode(botao, INPUT); // botão no pino 12
pinMode(Green, OUTPUT);
pinMode(Yellow, OUTPUT);
pinMode(Red, OUTPUT);
digitalWrite(33, LOW);
digitalWrite(23, LOW);
digitalWrite(25, LOW);
digitalWrite(19, LOW);
digitalWrite(32, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
// acende a luz verde (carros) e vermelha (pedestre)
digitalWrite(Green, HIGH);
digitalWrite(pedvermelho, HIGH);
lcd.clear();
loop();
attachInterrupt(digitalPinToInterrupt(botao)), loop, RISING);
}
void loop() {
/* verifica se o botão foi pressionado e se transcorreram 20 segundos desde a última vez que
isso ocorreu */
/* verifica se o botão foi pressionado e se transcorreram 5 segundos desde a última vez que
isso ocorreu */
int teste = digitalRead(botao);
if () {
for (int v = 20 ; v > 0.1; v--) {
lcd.clear();
lcd.print("Carros em Curso");
lcd.setCursor(0, 1);
lcd.print(v);
}
}
digitalRead(botao);
}
void chama(){
pedestre();
}
}
void pedestre() {
lcd.clear();
for (int v = 0 ; v > 21 ; v++) {
lcd.clear();
lcd.print("Carros em Curso");
lcd.setCursor(0, 1);
lcd.print(v);
lcd.setCursor(4, 1);
lcd.print("Botao Disp.");
for (int x = 5; x > 0.1; x--) {
lcd.home();
lcd.print("Carros parando:");
lcd.setCursor(0, 1);
lcd.print(x);
digitalWrite(Green, HIGH);
delay(500);
digitalWrite(Green, LOW);
delay(500);
}
lcd.clear();
lcd.print("Aguardem...");
lcd.setCursor(0, 1);
lcd.print(3);
delay(1000);
lcd.clear();
lcd.print("Aguardem...");
lcd.setCursor(0, 1);
lcd.print(2);
lcd.clear();
digitalWrite(Green, LOW); // apaga o verde
digitalWrite(Yellow, HIGH); // acende o amarelo
delay(1000);
digitalWrite(Yellow, LOW); // apaga o amarelo
digitalWrite(Red, HIGH); // acende o vermelho
lcd.print("Aguardem...");
lcd.setCursor(0, 1);
lcd.print(1);
delay(1000); // espera 1 segundo, por segurança
lcd.clear();
digitalWrite(pedvermelho, LOW); // apaga o vermelho dos pedestres
digitalWrite(pedverde, HIGH);
// acende o verde dos pedestres
lcd.clear();
for (int j = 10; j > 0.1; j--) {
lcd.clear();
lcd.home();
lcd.print("Pedestres: ");
lcd.setCursor(0, 1);
lcd.print("Em:");
lcd.setCursor(4, 1);
lcd.print(j);
for (int i = 0; i < 8; i++) {
digitalWrite(pinos7seg[i], disp7seg[j][i]);
}
delay(900);
}
digitalWrite(33, LOW);
digitalWrite(23, LOW);
digitalWrite(25, LOW);
digitalWrite(19, LOW);
digitalWrite(32, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
semaforo();
}
void semaforo() {
//uso do FOR para o led verde piscar rapidamente
//sinalizando que o sinal dos pedestres vai fechar
for (int x = 5; x > 0.1; x--) {
lcd.clear();
lcd.home();
lcd.print("Carros em:");
lcd.setCursor(0, 1);
lcd.print(x);
digitalWrite(pedverde, HIGH);
delay(500);
digitalWrite(pedverde, LOW);
delay(500);
lcd.clear();
}
// acende o vermelho dos pedestres
digitalWrite(pedvermelho, HIGH);
delay(500);
digitalWrite(Red, LOW); // apaga o vermelho
digitalWrite(Green, HIGH); // acende o verde
// registra o tempo desde a última alteração no semáforo
changeTime = millis();
// depois retorna para o loop principal do programa
lcd.clear();
setup();
}