//exercicio 7
//inclusão bibliotecas
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd1(0x27,16,2);//definição lcd
LiquidCrystal_I2C lcd2(0x26,16,2);
Servo servo;
//definir pinos servo
#define servo_pin 3
#define PIN_TRIG_01 4
#define PIN_ECHO_01 5
#define PIN_TRIG_02 6
#define PIN_ECHO_02 7
int valor_servo = 0;
int duracao_01 = 0;
int duracao_02 = 0;
const long Intervalo = 1000;
unsigned long Anterior = 0;
const long Intervalo_Sensor = 5000;
unsigned long Anterior_Sensor = 0;
int Contador = 0;
void setup()
{
Serial.begin(9600);
lcd1.init();
lcd2.init();
servo.attach(servo_pin);
pinMode(PIN_TRIG_01, OUTPUT);
pinMode(PIN_ECHO_01, INPUT);
pinMode(PIN_TRIG_02, OUTPUT);
pinMode(PIN_ECHO_02, INPUT);
lcd1.setBacklight(HIGH);
lcd2.setBacklight(HIGH);
servo.write(0);
}
void loop()
{ //uso de tempo em milis
unsigned long Atual = millis();
unsigned long Atual_Sensor = millis();
digitalWrite(PIN_TRIG_01, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_01, LOW);
int duration_01 = pulseIn(PIN_ECHO_01, HIGH);
duracao_01 = duration_01 / 58;
digitalWrite(PIN_TRIG_02, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_02, LOW);
int duration_02 = pulseIn(PIN_ECHO_02, HIGH);
duracao_02 = duration_02 / 58;
if (Atual - Anterior >= Intervalo)
{
Anterior = Atual;
if (duracao_01 > 200)
{
lcd1.setCursor(3, 0);
lcd1.print(" PERCURSO ");
lcd1.setCursor(3, 1);
lcd1.print(" LIVRE ");
}
else
{
lcd1.setCursor(3, 0);
lcd1.print("DIMINUA A ");
lcd1.setCursor(3, 1);
lcd1.print("VELOCIDADE ");
servo.write(90);
}
switch (Contador)
{
case 0:
if (duracao_02 > 200)
{
lcd2.setCursor(3, 0);
lcd2.print(" PERCURSO ");
lcd2.setCursor(3, 1);
lcd2.print(" LIVRE ");
}
else
{
Contador = 1;
}
break;
case 1:
if (duracao_02 < 200)
{
lcd2.setCursor(3, 0);
lcd2.print("CANCELA ");
lcd2.setCursor(3, 1);
lcd2.print("SERA ABERTA ");
}
else
{
Contador = 2;
}
break;
case 2:
if (duracao_02 > 200)
{
if (Atual_Sensor - Anterior_Sensor >= Intervalo_Sensor)
{
Anterior_Sensor = Atual_Sensor;
lcd2.setCursor(3, 0);
lcd2.print(" CANCELA ");
lcd2.setCursor(3, 1);
lcd2.print(" ABERTA ");
servo.write(0);
}
else
{
Contador = 0;
}
}
break;
}
}
Serial.println(Atual_Sensor);
}