// 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 & ledgApin == 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) //Tempo do farol VERDE = 1500ms.........................
{
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)){
/* digitalWrite(vermelhoBP, LOW);
digitalWrite(verdeBP, HIGH); */
ledgA = 1; //verdeA
ledyA = 0;
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelhaB
millisTarefa1 = millis();
}
// put your main code here, to run repeatedly:
//delay(10); // this speeds up the simulation
}
void temporizador()
{
tempoAtual = millis();
/* Serial.println("TL");
Serial.println(tempolimite,DEC );
Serial.println("TAN");
Serial.println( tempoAnterior,DEC );
Serial.println( "I");
Serial.println(intervalo,DEC );
Serial.println( "TA");
Serial.println(tempoAtual,DEC );
Serial.println( "CT");
Serial.println(contTempo,DEC );*/
if (tempoAtual - tempoAnterior >= intervalo)
{
tempoAnterior = tempoAtual;
x = !x;
contTempo++;
// tempolimite=180
if (contTempo > tempolimite) contTempo = 0;
}
}
//========================================//
void saidas()
{
digitalWrite(verdeAP, ledgA);
digitalWrite(laranjaAP, ledyA);
digitalWrite(vermelhoAP, ledrA);
digitalWrite(verdeBP, ledgB);
digitalWrite(laranjaBP, ledyB);
digitalWrite(vermelhoBP, ledrB);
}
//========================================//A
B