/* include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo servo;
#define PIN_TRIG1 4
#define PIN_ECHO1 5
#define PIN_TRIG2 2
#define PIN_ECHO2 3
LiquidCrystal_I2C lcd1(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x3F, 16, 2);
bool sensorAnterior1 = false;
bool sensorAnterior2 = false;
int posServo = 0;
void setup() {
pinMode(PIN_TRIG1, OUTPUT);
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO1, INPUT);
pinMode(PIN_ECHO2, INPUT);
servo.attach(6);
servo.write(0);
lcd1.init();
lcd1.backlight();
lcd2.init();
lcd2.backlight();
}
void loop() {
// Inicia medição do sensor 1:
digitalWrite(PIN_TRIG1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG1, LOW);
int duration1 = pulseIn(PIN_ECHO1, HIGH); //calcula a distancia do sensor 1
int distanciaCM_1 = (duration1 / 58);
// Inicia medição do sensor 2:
digitalWrite(PIN_TRIG2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG2, LOW);
int duration2 = pulseIn(PIN_ECHO2, HIGH);//calcula a distancia do sensor 2
int distanciaCM_2 = (duration2 / 58);
//SENSOR 1
if (distanciaCM_1>=80){
//lcd1
//CLEAR
lcd1.setCursor (4,0);
lcd1.print("PERCURSO");
lcd1.setCursor (5,1);
lcd1.print ("LIVRE");
//lcd2
//CLEAR
lcd2.setCursor (4,0);
lcd2.print("PERCURSO");
lcd2.setCursor (5,1);
lcd2.print ("LIVRE");
}
else{
//lcd1
//CLEAR
lcd1.setCursor(4,0);
lcd1.print("DIMINUA");
lcd1.setCursor(3,1);
lcd1.print("VELOCIDADE");
//lcd2
//CLEAR
lcd2.setCursor(4,0);
lcd2.print("CANCELA");
lcd2.setCursor(3,1);
lcd2.print("SERA ABERTA");
posServo = 90;
}
//SERVO ABRIR CANCELA
servo.write(posServo);
if(posServo=90){
lcd2.clear();
lcd2.setCursor(4,0);
lcd2.print("CANCELA");
lcd2.setCursor(5,1);
lcd2.print("ABERTA");
}
//SERVO FECHAR CANCELA
if (distanciaCM_2>=80){
lcd2.setCursor (4,0);
lcd2.print("PERCURSO");
lcd2.setCursor (5,1);
lcd2.print ("LIVRE");
posServo = 0;
}
}
//CONSERTAR CLEAR NOS TEXTOS E FECHAR CANCELA
*/
//*
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa o servo motor
Servo servoMotor;
// Endereços I2C dos displays LCD
LiquidCrystal_I2C lcd1(0x27, 16, 2);
LiquidCrystal_I2C lcd2(0x3F, 16, 2);
// Pinos dos sensores ultrassônicos
const int trigPin1 = 2;
const int echoPin1 = 3;
const int trigPin2 = 4;
const int echoPin2 = 5;
// Variáveis de tempo
long duration1, duration2;
int distance1, distance2;
void setup() {
// Configura os pinos dos sensores ultrassônicos
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
// Configura o servo motor
servoMotor.attach(6);
servoMotor.write(0); // Posição inicial do servo motor
// Inicializa os displays LCD
lcd1.init();
lcd2.init();
lcd1.backlight();
lcd2.backlight();
// Mensagens iniciais nos displays LCD
lcd1.setCursor(0, 0);
lcd1.print("PERCURSO");
lcd1.setCursor(0, 1);
lcd1.print("LIVRE");
lcd2.setCursor(0, 0);
lcd2.print("PERCURSO");
lcd2.setCursor(0, 1);
lcd2.print("LIVRE");
}
void loop() {
// Calcula a distância do sensor1
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
// Calcula a distância do sensor2
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;
if (distance1 < 20) { // Veículo detectado pelo sensor1
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("DIMINUA A");
lcd1.setCursor(0, 1);
lcd1.print("VELOCIDADE");
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("CANCELA");
lcd2.setCursor(0, 1);
lcd2.print("SERA ABERTA");
servoMotor.write(90); // Abre a cancela
delay(1000); // Espera um tempo para o veículo passar pelo sensor1
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("CANCELA");
lcd2.setCursor(0, 1);
lcd2.print("ABERTA");
}
if (distance2 > 20) { // Veículo deixou de ser detectado pelo sensor2
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("PERCURSO");
lcd1.setCursor(0, 1);
lcd1.print("LIVRE");
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("PERCURSO");
lcd2.setCursor(0, 1);
lcd2.print("LIVRE");
servoMotor.write(0); // Fecha a cancela
}
delay(100); // Pequeno delay para evitar leituras muito frequentes
}