int Red = 25; // estabelece o semáforo para carros
int Yellow = 26;
int Green = 27;
int pedvermelho = 2; // estabelece o semáforo para pedestres
int pedverde = 15;
#define botao 14 //acionamento para pedestre
int travessia = 5000; // tempo para que os pedestres atravessem (5 segundos)
int leds[]={4,23,5,17,3,16,19};//g,f,e,d,c,b,a
int nove []={0,0,1,0,0,0,0};
int oito[]={0,0,0,0,0,0,0};
int sete[]={1,1,1,1,0,0,0};
int seis[]={0,0,0,0,0,1,0};
int cinco []={0,0,1,0,0,1,0};
int quatro[]={0,0,1,1,0,0,1};
int tres[]={0,1,1,0,0,0,0};
int dois[]={0,1,0,0,1,0,0};
int um []={1,1,1,1,0,0,1};
int zero []={1,0,0,0,0,0,0};
unsigned long changeTime; // tempo desde que o botão foi pressionado
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0X27, 16,2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(Red, OUTPUT);
pinMode(Yellow, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(pedvermelho, OUTPUT);
pinMode(pedverde, OUTPUT);
pinMode(botao, INPUT_PULLUP);
Serial.begin(115200);
for ( int i = 0; i<10;i++){
pinMode(leds[i], OUTPUT);
}
}
void loop() {
lcd.home();
digitalWrite(Green, HIGH);
digitalWrite(pedvermelho, HIGH);
lcd.print("carros passando");
lcd.setCursor(0,1);
lcd.print("verde");
lcd.setCursor(6,1);
lcd.print((millis()-changeTime)/1000);
int teste = digitalRead(botao);
if (teste == LOW && (millis() - changeTime) > 2000){
pedestre();
}
}
void pedestre(){
for(int i = 0;i<4;i++){
lcd.clear();
lcd.home();
lcd.print("carros passando");
lcd.setCursor(0,1);
lcd.print("verde");
lcd.setCursor(6,1);
lcd.print((millis()-changeTime)/1000);
digitalWrite(Green, HIGH);
delay(500);
digitalWrite(Green, LOW);
delay(500);
}
lcd.clear();
digitalWrite(Green, LOW);
digitalWrite(Yellow, HIGH);
lcd.print("Espere..");
lcd.setCursor(0,1);
lcd.print(2);
delay(1000);
lcd.clear();
lcd.print("Espere...");
lcd.setCursor(0,1);
lcd.print(1);
delay(1000);
digitalWrite(Yellow, LOW);
digitalWrite(Red, HIGH);
lcd.clear();
digitalWrite(pedvermelho, LOW); // apaga o vermelho dos pedestres
digitalWrite(pedverde, HIGH); // acende o verde dos pedestres
for (int x=0; x<5; x++) {
digitalWrite(pedverde, HIGH);
delay(250);
digitalWrite(pedverde, LOW);
delay(250);
}
segmentos();
}
void semaforo(){
for (int x=0; x<10; x++) {
digitalWrite(pedverde, HIGH);
delay(250);
digitalWrite(pedverde, LOW);
delay(250);
}
// 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
loop();
}
void segmentos(){
digitalWrite(pedverde, HIGH);
lcd.clear();
for ( int i = 0; i<7;i++) digitalWrite(leds[i],nove[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],oito[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],sete[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],seis[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],cinco[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],quatro[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],tres[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],dois[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],um[i]);
delay(1000);
for ( int i = 0; i<7;i++) digitalWrite(leds[i],zero[i]);
delay(1000);
semaforo();
}