//exercício 5
//Adiciona as bibliotecas utilizadas para controle do LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definição dos pinos dos sensores ultrassônicos
#define PIN_TRIG_1 2
#define PIN_ECHO_1 3
#define PIN_TRIG_2 4
#define PIN_ECHO_2 5
#define PIN_TRIG_3 6
#define PIN_ECHO_3 7
#define PIN_TRIG_4 8
#define PIN_ECHO_4 9
//atribui o valor 0 para as variáveis distanciaCM
int distanciaCM1 = 0;
int distanciaCM2 = 0;
int distanciaCM3 = 0;
int distanciaCM4 = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2); //Inicializa o display LCD no endereço 0x27 com 16 colunas e 2 linhas
// Definição dos caracteres personalizados para exibição no LCD
byte quadrado[8] = {
0b11111,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b11111,
0b00000,
};
byte quadradox[8] = {
0b11111,
0b10001,
0b11011,
0b10101,
0b11011,
0b10001,
0b11111,
0b00000,
};
void setup() {
lcd.init();//inicia o LCD
lcd.createChar(0, quadrado); // Cria caractere para vaga livre
lcd.createChar(1, quadradox); // Cria caractere para vaga ocupada
//escreve os quadrados de vagas vazias nas colunas da 12 a 15
lcd.setCursor(12,1);
lcd.write(byte(0));
lcd.setCursor(13,1);
lcd.write(byte(0));
lcd.setCursor(14,1);
lcd.write(byte(0));
lcd.setCursor(15,1);
lcd.write(byte(0));
//declara os pinos dos sensores como entradas e saídas
pinMode(PIN_TRIG_1, OUTPUT);
pinMode(PIN_ECHO_1, INPUT);
pinMode(PIN_TRIG_2, OUTPUT);
pinMode(PIN_ECHO_2, INPUT);
pinMode(PIN_TRIG_3, OUTPUT);
pinMode(PIN_ECHO_3, INPUT);
pinMode(PIN_TRIG_4, OUTPUT);
pinMode(PIN_ECHO_4, INPUT);
}
void loop() {
//codigo escrita no lcd
int soma = 0; //variável utilizada para contar quantas vagas estão livres ou ocupadas
//Leituras e cálculos dos sensores ultrassonicos
// Inicia uma nova medição pro sensor 1:
digitalWrite(PIN_TRIG_1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_1, LOW);
int duration1 = pulseIn(PIN_ECHO_1, HIGH); //le o resultado sensor 1
distanciaCM1 = (duration1 / 58);
// Inicia uma nova medição pro sensor 2:
digitalWrite(PIN_TRIG_2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_2, LOW);
int duration2 = pulseIn(PIN_ECHO_2, HIGH); //le o resultado sensor 2
distanciaCM2 = (duration2 / 58);
// Inicia uma nova medição pro sensor 1:
digitalWrite(PIN_TRIG_3, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_3, LOW);
int duration3 = pulseIn(PIN_ECHO_3, HIGH); //le o resultado sensor 3
distanciaCM3 = (duration3 / 58);
// Inicia uma nova medição pro sensor 1:
digitalWrite(PIN_TRIG_4, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_4, LOW);
int duration4 = pulseIn(PIN_ECHO_4, HIGH); //le o resultado sensor 4
distanciaCM4 = (duration4 / 58);
lcd.setBacklight(HIGH); //acende a luz de fundo do LCD
//escreve LIVRES e OCUPADAS no LCD, no lado esquerdo
lcd.setCursor(0,0);
lcd.print("LIVRES");
lcd.setCursor(0,1);
lcd.print("OCUPADOS");
lcd.setCursor(12,0);
lcd.print("1234"); //escreve qual a vaga que se refere na coluna
//Detecção se carro está na vaga ou não, fazendo o desenho de quadrado vazio ou com X, e também somando para saber quantas vagas estão livres ou ocupadas
//vaga 1
if(distanciaCM1 <= 180){ //se um carro for detectado a menos de 180, soma 1 a variável "soma" e desenha um quadrado com X no LCD
int valor1 = 1;
soma += valor1;
delay(3000); //delay para tempo minimo do carro ficar na vaga
lcd.setCursor(12,1);
lcd.write(byte(1));
}
else if(distanciaCM1 > 180){ //Já se não estiver sendo detectado nenhum carro, desenha o quadrado vazio no LCD e não soma nenhum valor a variávem "soma"
int valor12 = 0;
soma += valor12;
lcd.setCursor(12,1);
lcd.write(byte(0));
}
//vaga 2
if(distanciaCM2 <= 180){
int valor2 = 1;
soma += valor2;
lcd.setCursor(13,1);
lcd.write(byte(1));
}
else if(distanciaCM2 > 180){
int valor22 = 0;
soma += valor22;
lcd.setCursor(13,1);
lcd.write(byte(0));
}
//vaga 3
if(distanciaCM3 <= 180){
int valor3 = 1;
soma += valor3;
lcd.setCursor(14,1);
lcd.write(byte(1));
}
else if(distanciaCM3 > 180){
int valor32 = 0;
soma += valor32;
lcd.setCursor(14,1);
lcd.write(byte(0));
}
//vaga 4
if(distanciaCM4 <= 180){
int valor4 = 1;
soma += valor4;
lcd.setCursor(15,1);
lcd.write(byte(1));
}
else if(distanciaCM4 > 180){
int valor42 = 0;
soma += valor42;
lcd.setCursor(15,1);
lcd.write(byte(0));
}
//fim das vagas
lcd.setCursor(9,1);//coloca o cursor na coluna 9 linha 1 para escrever a soma das vagas ocupadas
lcd.print(soma);
int soma2 = 4 - soma;
lcd.setCursor(7,0);//coloca o cursor na coluna 7 linha 0 para escrever a soma das vagas livres
lcd.print(soma2);
}