// Exercício 5
// Breno Correia Lociks
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define PIN_TRIG1 A1
#define PIN_ECHO1 A0
#define PIN_TRIG2 A3
#define PIN_ECHO2 A2
#define PIN_TRIG3 5
#define PIN_ECHO3 4
#define PIN_TRIG4 3
#define PIN_ECHO4 2
#define LED_VERMELHO1 6
#define LED_VERDE1 7
#define LED_VERMELHO2 8
#define LED_VERDE2 9
#define LED_VERMELHO3 10
#define LED_VERDE3 11
#define LED_VERMELHO4 12
#define LED_VERDE4 13
uint8_t um[8] = {
0b11111,
0b10001,
0b10101,
0b11101,
0b10101,
0b10101,
0b11111,
0b11111,
};
uint8_t dois[8] = {
0b11111,
0b10001,
0b11111,
0b10011,
0b10101,
0b11001,
0b11111,
0b11111,
};
uint8_t tres[8] = {
0b11111,
0b10001,
0b11111,
0b10011,
0b10111,
0b10011,
0b11111,
0b11111,
};
uint8_t quatro[8] = {
0b11111,
0b10001,
0b10111,
0b11011,
0b11111,
0b10011,
0b10011,
0b11111,
};
void setup() {
pinMode(PIN_TRIG1, OUTPUT);
pinMode(PIN_ECHO1, INPUT);
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO2, INPUT);
pinMode(PIN_TRIG3, OUTPUT);
pinMode(PIN_ECHO3, INPUT);
pinMode(PIN_TRIG4, OUTPUT);
pinMode(PIN_ECHO4, INPUT);
pinMode(LED_VERMELHO1, OUTPUT);
pinMode(LED_VERDE1, OUTPUT);
pinMode(LED_VERMELHO2, OUTPUT);
pinMode(LED_VERDE2, OUTPUT);
pinMode(LED_VERMELHO3, OUTPUT);
pinMode(LED_VERDE3, OUTPUT);
pinMode(LED_VERMELHO4, OUTPUT);
pinMode(LED_VERDE4, OUTPUT);
lcd.init();
lcd.setBacklight(HIGH);
lcd.createChar(1, um);
lcd.createChar(2, dois);
lcd.createChar(3, tres);
lcd.createChar(4, quatro);
lcd.setCursor(1,0);
lcd.print("\x01\x02\x03\x04 livres");
lcd.setCursor(6,1);
lcd.print("ocupadas");
}
void loop() {
int ocupadas = 0;
int livres = 0;
ocupadas = 0;
livres = 4;
digitalWrite(PIN_TRIG1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG1, LOW);
int duration1 = pulseIn(PIN_ECHO1, HIGH);
int distCM1 = duration1 / 58;
if(distCM1 < 182) {
digitalWrite(LED_VERMELHO1, HIGH);
digitalWrite(LED_VERDE1, LOW);
lcd.setCursor(1,1);
lcd.print("x");
livres--;
ocupadas++;
}
else {
digitalWrite(LED_VERDE1, HIGH);
digitalWrite(LED_VERMELHO1, LOW);
lcd.setCursor(1,1);
lcd.print(" ");
}
digitalWrite(PIN_TRIG2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG2, LOW);
int duration2 = pulseIn(PIN_ECHO2, HIGH);
int distCM2 = duration2 / 58;
if(distCM2 < 182) {
digitalWrite(LED_VERMELHO2, HIGH);
digitalWrite(LED_VERDE2, LOW);
lcd.setCursor(2,1);
lcd.print("x");
livres--;
ocupadas++;
}
else {
digitalWrite(LED_VERDE2, HIGH);
digitalWrite(LED_VERMELHO2, LOW);
lcd.setCursor(2,1);
lcd.print(" ");
}
digitalWrite(PIN_TRIG3, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG3, LOW);
int duration3 = pulseIn(PIN_ECHO3, HIGH);
int distCM3 = duration3 / 58;
if(distCM3 < 182) {
digitalWrite(LED_VERMELHO3, HIGH);
digitalWrite(LED_VERDE3, LOW);
lcd.setCursor(3,1);
lcd.print("x");
livres--;
ocupadas++;
}
else {
digitalWrite(LED_VERDE3, HIGH);
digitalWrite(LED_VERMELHO3, LOW);
lcd.setCursor(3,1);
lcd.print(" ");
}
digitalWrite(PIN_TRIG4, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG4, LOW);
int duration4 = pulseIn(PIN_ECHO4, HIGH);
int distCM4 = duration4 / 58;
if(distCM4 < 182) {
digitalWrite(LED_VERMELHO4, HIGH);
digitalWrite(LED_VERDE4, LOW);
lcd.setCursor(4,1);
lcd.print("x");
livres--;
ocupadas++;
}
else {
digitalWrite(LED_VERDE4, HIGH);
digitalWrite(LED_VERMELHO4, LOW);
lcd.setCursor(4,1);
lcd.print(" ");
}
lcd.setCursor(15,0);
lcd.print(livres);
lcd.setCursor(15,1);
lcd.print(ocupadas);
}