// VARIÁVEIS DE TEMPO ........................................................
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
unsigned long tempo1 = millis();
unsigned long tempo2 = millis();
unsigned long duration1= millis();
unsigned long duration2= millis();
//---Protótipo das Funções Auxiliares---//
int verdeAP=26;
int laranjaAP=25;
int vermelhoAP=33;
int verdeBP=12;
int laranjaBP=14;
int vermelhoBP=27;
int ledgPpin=13;
// TEMPO DOS FAROIS ..................................................................
unsigned long tempoAtual = 0, tempoAnterior = 0, intervalo = 100;
int contTempo = 0, cont500 = 0;
bool x = 0, y = 0;
// VARIAVEIS DOS SEMAFOROS A e B............................................
bool ledyA=0;
bool ledgA=0;
bool ledrA=0;
bool ledyB=0;
bool ledgB=0;
bool ledrB=0;
int BT = 1000;// BASE DE TEMPO
//TEMPO DAS CORES SEMÁFORO.............................
int VerdeA = 5 * BT; //50
int LaranjaA = 8* BT; //80
int VermelhoA = 14*BT;
int VerdeB = 12 * BT;
int LaranjaB = 13 * BT;
int VermelhoB = VerdeA + LaranjaA + 2*BT;
// int VermelhoB = VerdeA + LaranjaA + 2*BT; //140
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;
// VARIAVEIS DOS SENSORES 1 e 2..............................................
//ROTINA SEMÁFORO B......................................................................
//void temporizador();
void selecaoDeCor();
void saidas();
// INICIO DO SEPTUP..................................................................
void setup(){
// Inicia comunicação na porta serial
Serial.begin(115200);
// Define pinos dos leds como saída
pinMode(ledgPpin, INPUT);
pinMode(verdeBP, OUTPUT);
pinMode(laranjaBP, OUTPUT);
pinMode(vermelhoBP, OUTPUT);
pinMode(laranjaAP, OUTPUT);
pinMode(verdeAP, OUTPUT);
pinMode(vermelhoAP, OUTPUT);
}// FIM DO LAÇO void setup(){.........................................................
//ROTINA SEMÁFORO B......................................................................
void loop() {
if ((digitalRead(ledgPpin) == 1) && (digitalRead(verdeBP) == HIGH))
{
tempolimite = tempolimitevermelho ; //100
contTempo = vermelhopisca; //90
Serial.println("else if ledgPpin == 1 & ledgBpin == 1 ");
Serial.println( tempolimite,DEC );
Serial.println( contTempo,DEC );
} else {
if ((digitalRead(ledgPpin) == 1) && ((digitalRead(vermelhoAP) == HIGH) && (digitalRead(vermelhoBP) == HIGH)))
{
tempolimite = tempolimiteverde ; //120
contTempo = verdepisca; //110
Serial.println("else if ledgPpin == 1 & ledrCpin == 1 ledrApin == 1 ");
Serial.println( tempolimite,DEC );
Serial.println( contTempo,DEC );
} else {
if ((digitalRead(ledgPpin) == 1) && (digitalRead(laranjaAP) == HIGH))
{
tempolimite = tempolimiteamarelo ; //110
contTempo = amarelopisca; //100
Serial.println("else if ledgPpin == 1 & ledyCpin == 1 ");
Serial.println( tempolimite,DEC );
Serial.println( contTempo,DEC );
} else {
if ((digitalRead(ledgPpin) == 1) && (digitalRead(verdeAP) == HIGH))
{
tempolimite = tempolimiteverde ; //120
contTempo = verdepisca; //110
Serial.println("else if ledgPpin == 1 & ledgCpin == 1 ");
Serial.println( tempolimite,DEC );
Serial.println( contTempo,DEC );
}
}
}
}
// temporizador();
selecaoDeCor();
saidas();
}
//========================================//
void selecaoDeCor() {
tempo1 = millis()-millisTarefa1;
// verdeA=50
if(tempo1 <= VerdeA) {
ledgA = 1; //verde A
ledyA = 0;
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
// laranjaA=30
if((tempo1>VerdeA)&&(tempo1<=(LaranjaA))){
ledgA = 0;
ledyA = 1;//Laranja A
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
//BT=10, vermelhoA= vermelhoB
if(( tempo1 >LaranjaA)&&(tempo1<=(LaranjaA+ BT))){
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
//verdeB=30
if(( tempo1 > (LaranjaA+ BT))&&(tempo1<=(VerdeB))){
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 1;//verde B
ledyB = 0;
ledrB = 0;
}
//laranjaB=10
if(( tempo1 > (VerdeB))&&(tempo1<=(LaranjaB))){
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 0;
ledyB = 1;//laramjaB
ledrB = 0;
}
if(( tempo1 > ( LaranjaB ))&&(tempo1<=(LaranjaB+BT))){
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelhaB
}
//Tempo Total do SEMAFORO B = (1500Vd+500La+3000Vm) ms....................
if(tempo1>=(LaranjaB+BT)){
ledgA = 1; //verdeA
ledyA = 0;
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelhaB
millisTarefa1 = millis();
}
x = !x;
/*
if ((tempo1 > VermelhoA) && (tempo1 < tempolimitevermelho )) //140
{
ledgB = 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".
ledrB = 0;
ledyB = x ; //amareloA
if (tempo1 == tempolimitevermelho - 1) {
tempolimite = tempolimitefim;
}
}
if ((tempo1 > tempolimitevermelho) && (tempo1 < tempolimiteamarelo)) //140
{
ledrA = 0;
ledgA = 0;
ledyA = x; //amarelo pisca
if (tempo1 == tempolimiteamarelo - 1) {
tempolimite = tempolimitefim;
}
}
if ((tempo1 > tempolimiteamarelo) && (tempo1 < tempolimiteverde)) //140
{
ledrA = 0;
ledgA = x; //verde pisca
ledyA = 0;
if (tempo1 == tempolimiteverde - 1) {
tempolimite = tempolimitefim;
}
}
*/
}
//========================================//
void saidas()
{
digitalWrite(verdeAP, ledgA);
digitalWrite(laranjaAP, ledyA);
digitalWrite(vermelhoAP, ledrA);
digitalWrite(verdeBP, ledgB);
digitalWrite(laranjaBP, ledyB);
digitalWrite(vermelhoBP, ledrB);
}
//========================================//A
B