/*
Andrey Celestino 36286
Augusto Elisio 37324
Isabela Sena 37330
Isadora Castelo 37655
*/
#include <Servo.h> //Coloca a biblioteca do servo
#include <LiquidCrystal_I2C.h> //Coloca a biblioteca do LCD
#define trig1 2 //Pino que lê a disância
#define echo1 5 //Pino que manda a distância (tem que ser pwm)
#define trig2 4
#define echo2 6
int sense = 0;
Servo servo1;
LiquidCrystal_I2C lcd1(0x27, 16,2);
LiquidCrystal_I2C lcd2(0x28, 16,2);
void setup() {
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
servo1.attach(3);
lcd1.init();
lcd2.init();
}
void loop() {
// Inicia uma nova medição:
digitalWrite(trig1, HIGH);
delayMicroseconds(10);
digitalWrite(trig1, LOW);
// Lê o resultado:
float duration1 = pulseIn(echo1, HIGH);
digitalWrite(trig2, HIGH);
delayMicroseconds(10);
digitalWrite(trig2, LOW);
float duration2 = pulseIn(echo2, HIGH);
float dist1 = duration1 / 58;
float dist2 = duration2 / 58;
lcd1.setBacklight(HIGH);
lcd2.setBacklight(HIGH);
if(dist1 > 200 && dist2 > 200){ //não foi detectado carro
sense = 0;
lcd1.setCursor(3, 0);
lcd1.print(" PERCURSO"); //usando espaços pro lcd não ficar piscando, porem um clear tambem funcionaria
lcd1.setCursor(3, 1);
lcd1.print(" LIVRE ");
lcd2.setCursor(3, 0);
lcd2.print(" PERCURSO");
lcd2.setCursor(3, 1);
lcd2.print(" LIVRE ");
}
if(dist1 <= 200 && dist1 > 100 && dist2 > 200){ //carro chegou no corredor
sense = 0;
lcd1.setCursor(3, 0);
lcd1.print("DIMINUA A");
lcd1.setCursor(3, 1);
lcd1.print("VELOCIDADE");
lcd2.setCursor(4, 0);
lcd2.print(" CANCELA");
lcd2.setCursor(3, 1);
lcd2.print("SERA ABERTA");
}
if(dist1 <= 100 && dist2 > 200){ //carro passando pelo sensor 1
sense = 1;
lcd1.setCursor(3, 0);
lcd1.print("DIMINUA A");
lcd1.setCursor(3, 1);
lcd1.print("VELOCIDADE");
lcd2.setCursor(4, 0);
lcd2.print(" CANCELA");
lcd2.setCursor(3, 1);
lcd2.print(" ABERTA ");
}
if(dist1 > 200 && dist2 <= 200){ //carro no sensor 2
sense = 1;
lcd1.setCursor(3, 0);
lcd1.print("DIMINUA A");
lcd1.setCursor(3, 1);
lcd1.print("VELOCIDADE");
lcd2.setCursor(4, 0);
lcd2.print(" CANCELA");
lcd2.setCursor(3, 1);
lcd2.print(" ABERTA ");
}
if(dist1 <= 200 && dist2 <= 200){ //situação impossivel
lcd1.setCursor(3, 0);
lcd1.print(" TIRE A ");
lcd1.setCursor(3, 1);
lcd1.print(" LIMOSINE ");
lcd2.setCursor(4, 0);
lcd2.print("PROIBIDO");
lcd2.setCursor(3, 1);
lcd2.print(" LIMOSINE ");
}
if(sense == 1){
servo1.write(90);
} else{
servo1.write(0);
}
}