// ETEC Aristóteles Ferreira.
// Lucas Nascimento 3P1.
// ----------------------------------------------------- //
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definindo os pinos do sensor ultrassônico.
#define TRIG_PIN_1 A3
#define ECHO_PIN_1 10
#define TRIG_PIN_2 11
#define ECHO_PIN_2 12
#define TRIG_PIN_3 13
#define ECHO_PIN_3 A0
#define TRIG_PIN_4 A1
#define ECHO_PIN_4 A2
// Definindo os pinos do LEDs.
#define GREEN_LED_1 2
#define RED_LED_1 3
#define GREEN_LED_2 4
#define RED_LED_2 5
#define GREEN_LED_3 6
#define RED_LED_3 7
#define GREEN_LED_4 8
#define RED_LED_4 9
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço do LCD I2C.
void setup() {
lcd.begin(16, 2);
lcd.backlight();
// Configurar pinos dos LEDs.
pinMode(GREEN_LED_1, OUTPUT);
pinMode(RED_LED_1, OUTPUT);
pinMode(GREEN_LED_2, OUTPUT);
pinMode(RED_LED_2, OUTPUT);
pinMode(GREEN_LED_3, OUTPUT);
pinMode(RED_LED_3, OUTPUT);
pinMode(GREEN_LED_4, OUTPUT);
pinMode(RED_LED_4, OUTPUT);
// Configurar pinos dos sensores ultrassônicos.
pinMode(TRIG_PIN_1, OUTPUT);
pinMode(ECHO_PIN_1, INPUT);
pinMode(TRIG_PIN_2, OUTPUT);
pinMode(ECHO_PIN_2, INPUT);
pinMode(TRIG_PIN_3, OUTPUT);
pinMode(ECHO_PIN_3, INPUT);
pinMode(TRIG_PIN_4, OUTPUT);
pinMode(ECHO_PIN_4, INPUT);
}
void loop() {
int vagasLivres = 0;
int vagasOcupadas = 0;
String statusVagas = " "; // Inicializa como espaços em branco.
for (int i = 1; i <= 4; i++) {
int distance = checkDistance(i);
if (distance < 100) { // Se a distância for menor que 1 metro.
digitalWrite(RED_LED_1 + (i - 1) * 2, HIGH);
digitalWrite(GREEN_LED_1 + (i - 1) * 2, LOW);
vagasOcupadas++;
statusVagas.setCharAt(i - 1, 'x'); // Marca a vaga como ocupada.
} else {
digitalWrite(RED_LED_1 + (i - 1) * 2, LOW);
digitalWrite(GREEN_LED_1 + (i - 1) * 2, HIGH);
vagasLivres++;
statusVagas.setCharAt(i - 1, ' '); // Vaga livre.
}
}
// Atualiza o LCD.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1234");
lcd.setCursor(5, 0);
lcd.print("Livres ");
lcd.print(vagasLivres); // Mostra o número de vagas livres.
lcd.setCursor(0, 1);
lcd.print(statusVagas); // Mostra o status das vagas.
lcd.setCursor(5, 1);
lcd.print("Ocupadas ");
lcd.print(vagasOcupadas); // Mostra o número de vagas ocupadas.
delay(1000); // Atualiza a cada segundo.
}
int checkDistance(int vaga) {
long duration, distance;
if (vaga == 1) {
digitalWrite(TRIG_PIN_1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN_1, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_1, LOW);
duration = pulseIn(ECHO_PIN_1, HIGH);
} else if (vaga == 2) {
digitalWrite(TRIG_PIN_2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN_2, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_2, LOW);
duration = pulseIn(ECHO_PIN_2, HIGH);
} else if (vaga == 3) {
digitalWrite(TRIG_PIN_3, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN_3, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_3, LOW);
duration = pulseIn(ECHO_PIN_3, HIGH);
} else if (vaga == 4) {
digitalWrite(TRIG_PIN_4, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN_4, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN_4, LOW);
duration = pulseIn(ECHO_PIN_4, HIGH);
}
distance = duration / 58; // Cálculo da distância em cm.
return distance;
}
// ----------------------------------------------------- //
Sensor Ultrassônico - 1
Sensor Ultrassônico - 2
Sensor Ultrassônico - 3
Sensor Ultrassônico - 4