// 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();
// TEMPO DOS FAROIS ..................................................................
unsigned long tempoAtual = 0, tempoAnterior = 0, intervalo = 100;
//---Protótipo das Funções Auxiliares---//
void setupInicial();
void temporizador();
void selecaoDeCor();
void saidas();
int contTempo = 0, cont500 = 0;
int BT = 1000;// BASE DE TEMPO
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;
int VerdeA = 5 * BT; //50
int LaranjaA = 3* BT; //80
int VerdeB = 3 * BT;
int LaranjaB = 1 * BT;
int VermelhoB = VerdeA + LaranjaA + 2*BT;
// int VermelhoB = VerdeA + LaranjaA + 2*BT; //140
int VermelhoA = 6*BT;
// 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 verdeAP=26;
int laranjaAP=25;
int vermelhoAP=33;
int verdeBP=12;
int laranjaBP=14;
int vermelhoBP=27;
// VARIAVEIS DOS SENSORES 1 e 2..............................................
int ledgPpin=13;
// 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 );
}
}
}
}
selecaoDeCor();
saidas();
}
//========================================//
void selecaoDeCor() {
tempo1 = millis()-millisTarefa1;
// verdeA=50
if(tempo1 <= VerdeA) //Tempo do farol VERDE = 1500ms.........................
{ /* digitalWrite(verdeAP, HIGH);
digitalWrite(laranjaAP, LOW);
digitalWrite(vermelhoAP, LOW);
digitalWrite(vermelhoBP, HIGH);
digitalWrite(laranjaBP, LOW);
digitalWrite(verdeBP, LOW);*/
ledgA = 1; //verde A
ledyA = 0;
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
// laranjaA=30
if((tempo1>VerdeA)&&(tempo1<=(VerdeA+LaranjaA))){
/* digitalWrite(verdeBP, LOW);
digitalWrite(laranjaBP, HIGH);*/
ledgA = 0;
ledyA = 1;//Laranja A
ledrA = 0;
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
//BT=10, vermelhoA= vermelhoB
if(( tempo1 > VerdeA+LaranjaA)&&(tempo1<=(VerdeA+LaranjaA+ BT))){
/* digitalWrite(laranjaAP, LOW);
digitalWrite(vermelhoAP, HIGH);} //VERMELHO A */
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 0;
ledyB = 0;
ledrB = 1; //vermelho B
}
//verdeB=30
if(( tempo1 > (VerdeA+LaranjaA+ BT))&&(tempo1<=(VerdeA+LaranjaA+ BT+VerdeB))){
/* digitalWrite(vermelhoAP, LOW);//VERMELHO A LOW
digitalWrite(verdeAP, HIGH);*/
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 1;//verde B
ledyB = 0;
ledrB = 0;
}
//laranjaB=10
if(( tempo1 > (VerdeA+LaranjaA+ BT+VerdeB))&&(tempo1<=(VerdeA+LaranjaA+BT+VerdeB+LaranjaB))){
/* digitalWrite(verdeAP, LOW);
digitalWrite(laranjaAP, HIGH);*/
ledgA = 0;
ledyA = 0;
ledrA = 1;//vermelhoA
ledgB = 0;
ledyB = 1;//laramjaB
ledrB = 0;
}
if(( tempo1 > (VerdeA+LaranjaA+BT+VerdeB + LaranjaB ))&&(tempo1<=(VerdeA+LaranjaA+ BT+VerdeB+LaranjaB+BT))){
/*digitalWrite(laranjaBP, LOW);
digitalWrite(vermelhoBP, HIGH); */
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>=(VerdeA+LaranjaA+ BT+VerdeB+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 saidas()
{
digitalWrite(verdeAP, ledgA);
digitalWrite(laranjaAP, ledyA);
digitalWrite(vermelhoAP, ledrA);
digitalWrite(verdeBP, ledgB);
digitalWrite(laranjaBP, ledyB);
digitalWrite(vermelhoBP, ledrB);
}
//========================================//(click to edit)
A
B