#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int trigPins[4] = {9, 5, 7, 11};
const int echoPins[4] = {8, 4, 6, 10};
const int greenLEDs[4] = {2, 3, 12, 13};
const int redLEDs[4] = {A0, A1, A2, A3};
long duration;
int distance[4];
void setup() {
lcd.begin(16, 2);
lcd.backlight();
for (int i = 0; i < 4; i++) {
pinMode(echoPins[i], INPUT);
pinMode(trigPins[i], OUTPUT);
pinMode(greenLEDs[i], OUTPUT);
pinMode(redLEDs[i], OUTPUT);
// Inicializa e testa os LEDs
digitalWrite(greenLEDs[i], HIGH);
digitalWrite(redLEDs[i], HIGH);
delay(500);
digitalWrite(greenLEDs[i], LOW);
digitalWrite(redLEDs[i], LOW);
}
lcd.setCursor(1, 0);
lcd.print("Estacionamento");
delay(2000);
lcd.clear();
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(trigPins[i], HIGH);
delayMicroseconds(10);
digitalWrite(trigPins[i], LOW);
duration = pulseIn(echoPins[i], HIGH);
distance[i] = duration * 0.034 / 2;
}
for (int i = 0; i < 4; i++) {
if (distance[i] < 15) {
digitalWrite(greenLEDs[i], LOW);
digitalWrite(redLEDs[i], HIGH);
} else {
digitalWrite(greenLEDs[i], HIGH);
digitalWrite(redLEDs[i], LOW);
}
}
lcd.setCursor(2, 0);
lcd.print("1 2 3 4");
for (int i = 0; i < 4; i++) {
lcd.setCursor(2 + i * 3, 1);
if (distance[i] < 15) {
lcd.print("X"); // X = Ocupado
} else {
lcd.print(" "); // (void) = Livre
}
}
delay(1000);
}
VAGAS OCUPADAS
VAGAS LIVRES