//---Mapeamento de Hardware---//
#define ledgPpin 13//15 //SD3
//#define ledgPpin1 3 //SD2
#define ledrCpin 33 //16//D2
#define ledyCpin 25 //4 //D0
#define ledgCpin 26 //5//D1
#define ledrApin 27 //2 //D4
#define ledyApin 14 //14 //D5i
#define ledgApin 12 //0 //D3
//---Variáveis Globais---//
unsigned long tempoAtual = 0, tempoAnterior = 0, intervalo = 100;
int contTempo = 0, cont500 = 0;
bool x = 0, y = 0;
bool ledrC = 0, ledgC = 0, ledyC = 0, ledrP = 0, ledgP = 0;
bool ledrA = 0, ledgA = 0, ledyA = 0;
int BT = 10; //10
int verde = 5 * BT; //50
int amarelo = 8 * BT; //80
int vermelho = 14 * BT; //140
int verdeA = 12 * BT;
int amareloA = 13 * BT;
int tempolimitefim = 14 * BT;
int tempolimite = 14 * BT; // 140
int vermelhopisca = tempolimite + BT;
int tempolimitevermelho = vermelhopisca + BT;
int amarelopisca = tempolimitevermelho + BT;
int tempolimiteamarelo = amarelopisca + BT;
int verdepisca = tempolimiteamarelo + BT;
int tempolimiteverde = verdepisca + BT;
//---Protótipo das Funções Auxiliares---//
void setupInicial();
void temporizador();
void selecaoDeCor();
void saidas();
//---Configurações Iniciais---//
void setup()
{
setupInicial();
Serial.begin(115200);
}
//---Ciclo Infinito---//
void loop()
{
if ((digitalRead(ledgPpin) == 1) && (digitalRead(ledgApin) == HIGH))
{
tempolimite = tempolimitevermelho ; //100
contTempo = vermelhopisca; //90
} else {
if ((digitalRead(ledgPpin) == 1) && ((digitalRead(ledrCpin) == HIGH) && (digitalRead(ledrApin) == HIGH)))
{
Serial.println("else if ledgPpin == 1 & ledrCpin == 1 ledrApin == 1");
tempolimite = tempolimiteverde ; //120
contTempo = verdepisca; //110
} else {
if ((digitalRead(ledgPpin) == 1) && (digitalRead(ledyCpin) == HIGH))
{
Serial.println("if ledgPpin == 1 & ledyCpin == 1");
tempolimite = tempolimiteamarelo ; //110
contTempo = amarelopisca; //100
} else {
if ((digitalRead(ledgPpin) == 1) && (digitalRead(ledgCpin) == HIGH))
{
Serial.println("else if ledgPpin == 1 & ledgCpin == 1");
tempolimite = tempolimiteverde ; //120
contTempo = verdepisca; //110
}
}
}
}
temporizador();
selecaoDeCor();
saidas();
}
//---Protótipo das Funções Auxiliares---//
void setupInicial()
{
pinMode(ledyCpin, OUTPUT);
pinMode(ledgCpin, OUTPUT);
pinMode(ledrCpin, OUTPUT);
pinMode(ledgPpin, INPUT);
//pinMode(ledgPpin1,INPUT);
pinMode(ledrApin, OUTPUT);
pinMode(ledgApin, OUTPUT);
pinMode(ledyApin, OUTPUT);
}
//========================================//
void temporizador()
{
tempoAtual = millis();
if (tempoAtual - tempoAnterior >= intervalo)
{
tempoAnterior = tempoAtual;
x = !x;
contTempo++;
// tempolimite=180
if (contTempo > tempolimite) contTempo = 0;
}
}
//========================================//
void selecaoDeCor()
{
//tempo verde && tempo vermelhoA
if (contTempo < verde) //50
{
ledrC = 0;
ledgC = 1; //verde
ledyC = 0;
ledgA = 0;
ledrA = 1; //vermelhoA
ledyA = 0;
}
//tempo amarelo && tempo vermelhoA
if ((contTempo >= verde) && (contTempo < amarelo))
{
ledrC = 0;
ledgC = 0;
ledyC = 1; //amarelo
ledgA = 0;
ledrA = 1; //vermelhoA
ledyA = 0;
}
//tempo comum VermelhoA e vermelho
if ((contTempo >= amarelo) && (contTempo < (amarelo + BT)))
{
ledrC = 1; //vermelho
ledgC = 0;
ledyC = 0;
ledgA = 0;
ledrA = 1; //vermelhoA
ledyA = 0;
}
//tempo verdeA && tempo vermelho
if ((contTempo >= (amarelo + BT)) && (contTempo < verdeA))
{
ledrC = 1; //vermelho
ledgC = 0;
ledyC = 0;
ledgA = 1; //verdeA
ledrA = 0;
ledyA = 0;
}
//tempo amareloA && tempo vermelho
if ((contTempo >= verdeA) && (contTempo < amareloA))
{
ledrC = 1; //vermelho
ledgC = 0;
ledyC = 0;
ledgA = 0;
ledrA = 0;
ledyA = 1; //amareloA
}
// tempo vermelho && vermelhoA
if ((contTempo >= amareloA) && (contTempo < (amareloA + BT)))
{
ledrC = 1; //vermelho
ledgC = 0;
ledyC = 0;
ledgA = 0;
ledrA = 1; //vermelhoA
ledyA = 0;
}
if ((contTempo > vermelho) && (contTempo < tempolimitevermelho )) //140
{
ledgA = 0; //!x; // atribuir o valor inverso de x faz com que o amarelo e o verde pisquem de forma alternada ao pressionar botão durante o verde do semáforo "A".
ledrA = 0;
ledyA = x ; //amareloA
if (contTempo == tempolimitevermelho - 1) {
tempolimite = tempolimitefim;
}
}
if ((contTempo > tempolimitevermelho) && (contTempo < tempolimiteamarelo)) //140
{
ledrC = 0;
ledgC = 0;
ledyC = x; //amarelo pisca
if (contTempo == tempolimiteamarelo - 1) {
tempolimite = tempolimitefim;
}
}
if ((contTempo > tempolimiteamarelo) && (contTempo < tempolimiteverde)) //140
{
ledrC = 0;
ledgC = x; //verde pisca
ledyC = 0;
if (contTempo == tempolimiteverde - 1) {
tempolimite = tempolimitefim;
}
}
}
//========================================//
void saidas()
{
digitalWrite(ledyApin, !ledyA);
digitalWrite(ledgApin, !ledgA);
digitalWrite(ledrApin, !ledrA);
digitalWrite(ledyCpin, !ledyC);
digitalWrite(ledgCpin, !ledgC);
digitalWrite(ledrCpin, !ledrC);
}
//========================================//