#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Definindo os pinos dos sensores e LEDs
#define sensorVaga1 12
#define sensorVaga2 13
#define sensorVaga3 9
#define sensorVaga4 10
#define vm1vd1 32 // LED ou relé para vaga 1
#define vm2vd2 33 // LED ou relé para vaga 2
#define vm3vd3 25 // LED ou relé para vaga 3
#define vm4vd4 26 // LED ou relé para vaga 4
void setup() {
// Inicializando os pinos de entrada dos sensores e saída dos LEDs
pinMode(sensorVaga1, INPUT);
pinMode(sensorVaga2, INPUT);
pinMode(sensorVaga3, INPUT);
pinMode(sensorVaga4, INPUT);
pinMode(vm1vd1, OUTPUT);
pinMode(vm2vd2, OUTPUT);
pinMode(vm3vd3, OUTPUT);
pinMode(vm4vd4, OUTPUT);
// Inicializando o LCD
lcd.init();
lcd.backlight();
// Exibindo as informações iniciais no LCD
lcd.setCursor(0, 0);
lcd.print("VAGA 1: ");
lcd.setCursor(0, 1);
lcd.print("VAGA 2: ");
lcd.setCursor(0, 2);
lcd.print("VAGA 3: ");
lcd.setCursor(0, 3);
lcd.print("VAGA 4: ");
}
void loop() {
// Verificando o estado dos sensores e atualizando o LCD
verificarVagas();
// Atraso para atualização a cada segundo
delay(1000);
}
void verificarVagas() {
int vagasLivres = 0;
int vagasOcupadas = 0;
// Limpar completamente o LCD (para evitar sobreposição)
lcd.clear();
// Vaga 1
if (digitalRead(sensorVaga1) == HIGH) {
lcd.setCursor(0, 0);
lcd.print("VAGA 1: OCUPADA");
digitalWrite(vm1vd1, HIGH); // Acende o LED indicando vaga ocupada
vagasOcupadas++;
} else {
lcd.setCursor(0, 0);
lcd.print("VAGA 1: LIVRE ");
digitalWrite(vm1vd1, LOW); // Apaga o LED indicando vaga livre
vagasLivres++;
}
// Vaga 2
if (digitalRead(sensorVaga2) == HIGH) {
lcd.setCursor(0, 1);
lcd.print("VAGA 2: OCUPADA");
digitalWrite(vm2vd2, HIGH); // Acende o LED indicando vaga ocupada
vagasOcupadas++;
} else {
lcd.setCursor(0, 1);
lcd.print("VAGA 2: LIVRE ");
digitalWrite(vm2vd2, LOW); // Apaga o LED indicando vaga livre
vagasLivres++;
}
// Vaga 3
if (digitalRead(sensorVaga3) == HIGH) {
lcd.setCursor(0, 2);
lcd.print("VAGA 3: OCUPADA");
digitalWrite(vm3vd3, HIGH); // Acende o LED indicando vaga ocupada
vagasOcupadas++;
} else {
lcd.setCursor(0, 2);
lcd.print("VAGA 3: LIVRE ");
digitalWrite(vm3vd3, LOW); // Apaga o LED indicando vaga livre
vagasLivres++;
}
// Vaga 4
if (digitalRead(sensorVaga4) == HIGH) {
lcd.setCursor(0, 3);
lcd.print("VAGA 4: OCUPADA");
digitalWrite(vm4vd4, HIGH); // Acende o LED indicando vaga ocupada
vagasOcupadas++;
} else {
lcd.setCursor(0, 3);
lcd.print("VAGA 4: LIVRE ");
digitalWrite(vm4vd4, LOW); // Apaga o LED indicando vaga livre
vagasLivres++;
}
// Atualizando a tela com o número de vagas livres e ocupadas
lcd.setCursor(0, 0);
lcd.print("Livres: ");
lcd.print(vagasLivres);
lcd.setCursor(0, 1);
lcd.print("Ocupadas: ");
lcd.print(vagasOcupadas);
}