//******************************************************************************************
// 
// Exercicio cancela
//                          
//******************************************************************************************

// bibliotecas
#include <HCSR04.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

// cria o objeto para controle do servo 
Servo servo;

// mapeamento

#define TRIGGER1 10
#define ECHO1    9
#define TRIGGER2 6
#define ECHO2    5
#define SERVO_MOTOR    11
#define LCD1     0X20
#define LCD2     0X21

// variaveis
int tempo  =   200;
int val1;
boolean passando = false;
int distancia1;
int distancia2;

int semcarro = 300;
int comcarro = 100;

//Inicializa o display 
LiquidCrystal_I2C lcd1(LCD1,16,2);
LiquidCrystal_I2C lcd2(LCD2,16,2);

// Inicializa o sensor ultrassonico
UltraSonicDistanceSensor distanceSensor1(TRIGGER1, ECHO1); 
UltraSonicDistanceSensor distanceSensor2(TRIGGER2, ECHO2); 

void setup () {

//Inicializa o lcd

  // define o pino 11 como entrada para o servo
  servo.attach(11);

  //Liga o backlight
  lcd1.init();
  lcd1.setBacklight(HIGH);
  lcd2.init();
  lcd2.setBacklight(HIGH);

  //Mensagem
  lcd1.println("    ETEC AF   ");
  lcd1.setCursor(0,1);
  lcd1.println("   ELETRONICA   ");
  lcd1.setCursor(1,1);

  lcd2.println("   EXERCICIO   ");
  lcd2.setCursor(0,1);
  lcd2.println("    CANCELA");
  lcd2.setCursor(1,1);

  delay(5000);

  lcd1.clear();
  lcd2.clear();

  delay(100);

  
  lcd2.println("By ");
//  lcd2.setCursor(0,1);
for(int posi_LCD = 0; posi_LCD < 14; posi_LCD ++)
  {
    lcd2.setCursor(16,1);
    lcd2.scrollDisplayRight();  //Essa é a função que faz as letras se deslocarem

    delay(250);         // Quanto menor o tempo, mais rápido será o deslocamento
  }

  lcd1.println("Barreira ");
//  lcd2.setCursor(0,16);
for(int posi_LCD = 12; posi_LCD < 16; posi_LCD ++)
  {
    lcd1.setCursor(12,1);
    lcd1.scrollDisplayLeft();  //Essa é a função que faz as letras se deslocarem

    delay(250);         // Quanto menor o tempo, mais rápido será o deslocamento
  }





}

void loop () {

    
//Variável recebe o valor da função da biblioteca
  distancia1 = distanceSensor1.measureDistanceCm();
  distancia2 = distanceSensor2.measureDistanceCm();
    

/*
  if(distancia1 > carro && distancia2 > carro && passando == false){
    lcd1.println("-   Percurso   -");
    lcd1.setCursor(0,1);
    lcd1.println("-    Livre     -");
    lcd1.setCursor(0,0);
    
    lcd2.println("-   Percurso   -");
    lcd2.setCursor(0,1);
    lcd2.println("-    Livre     -");
    lcd2.setCursor(0,0);
    servo.write(0);
  }

  
  if(distancia1 <= carro && distancia2 > carro){
    lcd1.println("-   Percurso   -");
    lcd1.setCursor(0,1);
    lcd1.println("-    Livre     -");
    lcd1.setCursor(0,0);
    
    lcd2.println("-   Percurso   -");
    lcd2.setCursor(0,1);
    lcd2.println("-    Livre     -");
    lcd2.setCursor(0,0);
    servo.write(0);
  }

    lcd1.println("-  Diminua a   -");
    lcd1.setCursor(0,1);
    lcd1.println("-  Velocidade  -");
    lcd1.setCursor(0,0);
    
    lcd2.println("-   Cancela    -");
    lcd2.setCursor(0,1);
    lcd2.println("- Sera Aberta  -");
    lcd2.setCursor(0,0);
    servo.write(0);
    passando = true;
  }
*/
if(distancia1 > semcarro && distancia2 > semcarro){
    lcd1.println("-  Percurso    -");
    lcd1.setCursor(0,1);
    lcd1.println("-  Velocidade  -");
    lcd1.setCursor(0,0);
    
    lcd2.println("-   Cancela    -");
    lcd2.setCursor(0,1);
    lcd2.println("-    Aberta    -");
    lcd2.setCursor(0,0);
    servo.write(90);
  }
/*
  if(distancia1 > carro && distancia2 <= carro){
    lcd1.println("-   Percurso   -");
    lcd1.setCursor(0,1);
    lcd1.println("-    Livre     -");
    lcd1.setCursor(0,0);
    
    lcd2.println("-   Percurso   -");
    lcd2.setCursor(0,1);
    lcd2.println("-    Livre     -");
    lcd2.setCursor(0,0);
    servo.write(0);
    passando = false;
  }
  */
  delay(tempo);

}