int flag1 = 0; //CONTADOR SENSOR MASTER
int flag2 = 0; //CONTADOR SENSOR SLAVE 1
int flag3 = 0; //CONTADOR SENSOR SLAVE 2
//sensor 3 - SLAVE TERCEIRO (PARALELA>RODOVIA)
#define PIN_TRIG3 3
#define PIN_ECHO3 2
#define ledR3 23
#define ledG3 25
#define ledB3 27
//sempre verde (LIVRE), só fica vermelho (fechado) quando Terciario verde
//sensor 2 - SLAVE SECUNDARIO (PARALELA>RODOVIA)
#define PIN_TRIG2 5
#define PIN_ECHO2 4
#define ledR2 31
#define ledG2 33
#define ledB2 35
//sempre verde (LIVRE), só fica vermelho (fechado) quando Terciario verde
//sensor 1 - MASTER PRIMEIRO (RODOVIA>PARALELA)
#define PIN_TRIG1 7
#define PIN_ECHO1 6
#define ledR1 39
#define ledG1 41
#define ledB1 43
//sempre piscando amarelo (vá com cuidado meu fio), só dá passagem total quando ativado sensor
void setup() {
Serial.begin(9600);
//sensor 1
pinMode(PIN_TRIG1, OUTPUT);
pinMode(PIN_ECHO1, INPUT);
pinMode(ledR1, OUTPUT);
pinMode(ledG1, OUTPUT);
pinMode(ledB1, OUTPUT);
//sensor 2
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO2, INPUT);
pinMode(ledR2, OUTPUT);
pinMode(ledG2, OUTPUT);
pinMode(ledB2, OUTPUT);
//sensor 3
pinMode(PIN_TRIG3, OUTPUT);
pinMode(PIN_ECHO3, INPUT);
pinMode(ledR3, OUTPUT);
pinMode(ledG3, OUTPUT);
pinMode(ledB3, OUTPUT);
}
void loop() {
//Inicia uma nova medição:
//sensor MASTER
digitalWrite(PIN_TRIG1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG1, LOW);
int duracao1 = pulseIn(PIN_ECHO1, HIGH);
int distancia1 = duracao1 / 58;
//Inicia uma nova medição:
//sensor SLAVE 1
digitalWrite(PIN_TRIG2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG2, LOW);
int duracao2 = pulseIn(PIN_ECHO2, HIGH);
int distancia2 = duracao2 / 58;
//Inicia uma nova medição:
//sensor SLAVE 2
digitalWrite(PIN_TRIG3, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG3, LOW);
int duracao3 = pulseIn(PIN_ECHO3, HIGH);
int distancia3 = duracao3 / 58;
//----------------------------------------------------------------------------------------------
//LOOP LÓGICO
CONDICAO_INICIAL();
//-------------------------------------------------------------------------------
if (distancia3 < 200) {//se tiver carro SLAVE 3 aumenta a flag
flag3 += 1;
}
if(distancia3 > 200){ // se NAO tiver carro SLAVE 3zera a flag
flag3 = 0;
}
//-------------------------------------------------------------------------------
if (distancia2 < 200) {//se tiver carro SLAVE 3 aumenta a flag
flag2 += 1;
}
if(distancia2 > 200){ // se NAO tiver carro SLAVE 3zera a flag
flag2 = 0;
}
//-------------------------------------------------------------------------------
if (distancia1 < 200){ //se tiver carro aumenta a flag
flag1 += 1;
}
if(distancia1 > 200){ // se NAO tiver carro zera a flag
flag1 = 0;
}
//------------------------------------------------------------------------------
if(flag1 == 30){ //Se tiver carro no master parado por muito tempo
//semaforo master fica amarelo
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,LOW);
digitalWrite(ledB1,HIGH);
//semaforos slaves ficam amarelo
digitalWrite(ledR2,LOW);
digitalWrite(ledG2,LOW);
digitalWrite(ledB2,HIGH);
digitalWrite(ledR3,LOW);
digitalWrite(ledG3,LOW);
digitalWrite(ledB3,HIGH);
delay(3000);
//semaforos slaves fecham (vermelho)
digitalWrite(ledR2,LOW);
digitalWrite(ledG2,HIGH);
digitalWrite(ledB2,HIGH);
digitalWrite(ledR3,LOW);
digitalWrite(ledG3,HIGH);
digitalWrite(ledB3,HIGH);
delay(1500);
//semaforo master abre (verde)
digitalWrite(ledR1,HIGH);
digitalWrite(ledG1,LOW);
digitalWrite(ledB1,HIGH);
delay(15000);
flag1 = 0;
flag2 = 0;
flag3 = 0;
}
if(flag2 == 35){ //Se tiver carro no secundario parado por muito tempo
//semaforo master fica amarelo
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,LOW);
digitalWrite(ledB1,HIGH);
//semaforos slaves ficam amarelo
digitalWrite(ledR2,LOW);
digitalWrite(ledG2,LOW);
digitalWrite(ledB2,HIGH);
digitalWrite(ledR3,LOW);
digitalWrite(ledG3,LOW);
digitalWrite(ledB3,HIGH);
delay(3000);
//semaforos slaves e master fecham (vermelho)
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,HIGH);
digitalWrite(ledB1,HIGH);
digitalWrite(ledR3,LOW);
digitalWrite(ledG3,HIGH);
digitalWrite(ledB3,HIGH);
delay(1500);
//semaforo secundario abre (verde)
digitalWrite(ledR2,HIGH);
digitalWrite(ledG2,LOW);
digitalWrite(ledB2,HIGH);
delay(15000);
flag1 = 0;
flag2 = 0;
flag3 = 0;
}
if(flag2 == 40){ //Se tiver carro no secundario parado por muito tempo
//semaforo master fica amarelo
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,LOW);
digitalWrite(ledB1,HIGH);
//semaforos slaves ficam amarelo
digitalWrite(ledR2,LOW);
digitalWrite(ledG2,LOW);
digitalWrite(ledB2,HIGH);
digitalWrite(ledR3,LOW);
digitalWrite(ledG3,LOW);
digitalWrite(ledB3,HIGH);
delay(3000);
//semaforos slaves e master fecham (vermelho)
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,HIGH);
digitalWrite(ledB1,HIGH);
digitalWrite(ledR2,LOW);
digitalWrite(ledG2,HIGH);
digitalWrite(ledB2,HIGH);
delay(1500);
//semaforo terceiro abre (verde)
digitalWrite(ledR3,HIGH);
digitalWrite(ledG3,LOW);
digitalWrite(ledB3,HIGH);
delay(15000);
flag1 = 0;
flag2 = 0;
flag3 = 0;
}
//testador de flags
Serial.print("F1: ");
Serial.println(flag1);
Serial.print("F2: ");
Serial.println(flag2);
Serial.print("F3: ");
Serial.println(flag3);
Serial.println("--------");
}
void CONDICAO_INICIAL(){ //FLUXO SEMPRE ESTARA NESSE SENTIDO
//Led Sensor Slave 1 verde sempre CONDIÇÃO INICIAL
digitalWrite(ledR2,HIGH);
digitalWrite(ledG2,LOW);
digitalWrite(ledB2,HIGH);
//Led Sensor Slave 2 verde sempre CONDIÇÃO INICIAL
digitalWrite(ledR3,HIGH);
digitalWrite(ledG3,LOW);
digitalWrite(ledB3,HIGH);
// Led Sensor Master pisca pisca amarelo CONDIÇÃO INICIAL
digitalWrite(ledR1,LOW);
digitalWrite(ledG1,LOW);
digitalWrite(ledB1,HIGH);
delay(300);
digitalWrite(ledR1,HIGH);
digitalWrite(ledG1,HIGH);
digitalWrite(ledB1,HIGH);
delay(300);
}