// Learn about the ESP32 WiFi simulation in
// https://docs.wokwi.com/guides/esp32-wifi
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Objeto LiquidCrystal LCD
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
// Definição dos pinos
#define tr1 13
#define ec1 12
#define tr2 14
#define ec2 27
#define tr3 26
#define ec3 25
#define lr1 33
#define lg1 32
#define lr2 2
#define lg2 4
#define lr3 5
#define lg3 18
// Constantes de configuração
#define numVagas 3
#define distMinOcup 236
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT);// Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns
// the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
void setup() {
// Seta os pinos dos LEDs como de saída
pinMode(lr1, OUTPUT);
pinMode(lg1, OUTPUT);
pinMode(lr2, OUTPUT);
pinMode(lg2, OUTPUT);
pinMode(lr3, OUTPUT);
pinMode(lg3, OUTPUT);
// Configura a serial
Serial.begin(115200);
// Inicializa o LCD
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
}
void loop() {
float cm1, cm2, cm3;
int vagasOcupadas;
char buffer[16];
cm1 = 0.0344/2 * readUltrasonicDistance(tr1, ec1);
cm2 = 0.0344/2 * readUltrasonicDistance(tr2, ec2);
cm3 = 0.0344/2 * readUltrasonicDistance(tr3, ec3);
vagasOcupadas = 0;
if (cm1 < distMinOcup) {
vagasOcupadas++;
digitalWrite(lr1, HIGH);
digitalWrite(lg1, LOW);
}
else {
digitalWrite(lr1, LOW);
digitalWrite(lg1, HIGH);
}
if (cm2 < distMinOcup) {
vagasOcupadas++;
digitalWrite(lr2, HIGH);
digitalWrite(lg2, LOW);
}
else {
digitalWrite(lr2, LOW);
digitalWrite(lg2, HIGH);
}
if (cm3 < distMinOcup) {
vagasOcupadas++;
digitalWrite(lr3, HIGH);
digitalWrite(lg3, LOW);
}
else {
digitalWrite(lr3, LOW);
digitalWrite(lg3, HIGH);
}
LCD.clear();
LCD.setCursor(0,0);
sprintf(buffer, "V. Livres..: %02d", (numVagas - vagasOcupadas));
LCD.print(buffer);
LCD.setCursor(0,1);
sprintf(buffer, "V. Ocupadas: %02d", vagasOcupadas);
LCD.print(buffer);
delay(2000);
}