// Pinos dos LEDs
const int ledVerde = 5;
const int ledAmarelo = 6;
const int ledVermelho = 7;
const int ledVerdeB = 2;
const int ledAmareloB = 3;
const int ledVermelhoB = 4;
const int contato8 = 8;
// Tempos de cada fase (em milissegundos)
const unsigned long tempoVerde = 5000;// ESTADO 1
const unsigned long tempoAmareloC = 2000;// ESTADO 2
const unsigned long tempoVermelho = 6000;// ESTADO 3,4,5,6
const unsigned long tempoVermelhoC = 1000;//ESTADO 3 e 6
const unsigned long tempoVermelhoB = 7000;//ESTADO 6,1,2,3
const unsigned long tempoVerdeB = 4000; //ESTADO 4
unsigned long tempoAnterior = 0;
int estado = 1; // 0: Verde, 1: Amarelo, 2: Vermelho
void setup() {
Serial.begin(115200);
pinMode(contato8, INPUT_PULLUP);
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerdeB, OUTPUT);
pinMode(ledAmareloB, OUTPUT);
pinMode(ledVermelhoB, OUTPUT);
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledVerdeB, LOW);
digitalWrite(ledAmareloB, LOW);
digitalWrite(ledVermelhoB, HIGH);
}
void loop() {
unsigned long tempoAtual = millis(); // Captura o tempo atual
//........................................................
if (estado == 1) { // FASE VERDE, ESTADO 1
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, LOW);
if (digitalRead(contato8)==0)
{tempoAnterior = tempoAtual;
}
if (tempoAtual - tempoAnterior >= tempoVerde) {
estado = 2; // Muda para Amarelo ESTADO 2
tempoAnterior = tempoAtual; }
}
//........................................................
else if (estado == 2) { // FASE AMARELA, ESTADO 2
digitalWrite(ledVerde, LOW);
digitalWrite(ledAmarelo, HIGH);
if (digitalRead(contato8) == 0)
{ tempoAnterior = tempoAtual;
estado = 1;
}
if (tempoAtual - tempoAnterior >= tempoAmareloC) {
estado = 3;// Muda para Vermelho, ESTADO 3,4,5,6
tempoAnterior = tempoAtual; } }
//....................................................
else if (estado == 3) { // FASE VERMELHA COMUM, ESTADO 3
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, HIGH);
if ((digitalRead(contato8) == 0))
{ tempoAnterior = tempoAtual;
estado = 1; }
if (tempoAtual - tempoAnterior >= tempoVermelhoC) {
estado =4; // MUDA para o Verde B, ESTADO 4
tempoAnterior = tempoAtual; }
}
//....................................................
else if (estado == 4) { // FASE VERDE B, ESTADO 4
digitalWrite(ledVerdeB, HIGH);
digitalWrite(ledVermelhoB, LOW);
const unsigned long DIFERENCA = tempoAtual - tempoAnterior;
Serial.println(DIFERENCA);
Serial.println(tempoVerdeB);
if ((digitalRead(contato8) == 0))
{const unsigned long tempoVerdeB = tempoVerdeB - 2000;
}
if (tempoAtual - tempoAnterior >= tempoVerdeB)
{ estado =5; // MUDA para o Verde B, ESTADO 4
tempoAnterior = tempoAtual;
const unsigned long tempoVerdeB=4000;}
}
//....................................................
else if (estado == 5) { // FASE AMARELO B,ESTADO 5
digitalWrite(ledAmareloB, HIGH);
digitalWrite(ledVerdeB, LOW);
if ((digitalRead(contato8) == 0))
{ const unsigned long tempoAmareloC=tempoAmareloC-1000;
}
if (tempoAtual - tempoAnterior >= tempoAmareloC) {
estado =6; // MUDA para o VerdeVERMEHO C, ESTADO 6
tempoAnterior = tempoAtual;
const unsigned long tempoAmareloC = 2000; }
}
//....................................................
else if (estado == 6) { // FASE VERMELHOC,ESTADO 6
digitalWrite(ledAmareloB, LOW);
digitalWrite(ledVermelhoB, HIGH);
if (tempoAtual - tempoAnterior >= tempoVermelhoC) {
estado =1; // Volta para o Verde, ESTADO 1
tempoAnterior = tempoAtual;}
}
}SEMÁFORO A
SEMÁFORO B
1 2 3 4 5
1 2
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2
1 2 3 4