#include <Ultrasonic.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
bool trem_passando = false;
Servo cancela;
Ultrasonic sensor_distancia(19, 18);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(27, OUTPUT);
pinMode(14, OUTPUT);
pinMode(12, OUTPUT);
pinMode(25, OUTPUT);
cancela.attach(16, 500, 2400);
lcd.init();
lcd.backlight();
}
void loop() {
// put your main code here, to run repeatedly:
VerificaSensor();
VerificaTrem();
}
void VerificaSensor(){
int distancia_lida = sensor_distancia.read();
Serial.println(distancia_lida);
if(distancia_lida <= 5){
trem_passando = true;
}else{
trem_passando = false;
}
}
void VerificaTrem(){
if(trem_passando == true){
ligarSinalizacao();
fechaCancela();
lcd.clear();
lcd.setCursor(0,1);
lcd.print("TREM VINDO");
apitaBuzzer();
}else{
desligarSinalizacao();
lcd.clear();
lcd.setCursor(0,1);
lcd.print("PISTA LIVRE");
abreCancela();
}
}
void ligarSinalizacao(){
digitalWrite(27, HIGH);
digitalWrite(14, HIGH);
digitalWrite(12, HIGH);
}
void desligarSinalizacao(){
digitalWrite(27, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
}
void apitaBuzzer(){
tone(25, 95, 100);
delay(1000);
tone(25, 0, 100);
delay(1000);
}
void abreCancela(){
cancela.write(90);
}
void fechaCancela(){
cancela.write(180);
}