//exercício 5
//Felipe Vieira Conway Baccarat
//inclui as bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//define os pinos dos sensores e dos leds
#define PIN_ECHO_1 13
#define PIN_ECHO_2 12
#define PIN_ECHO_3 11
#define PIN_ECHO_4 10
#define PIN_TRIG_1 A0
#define PIN_TRIG_2 A1
#define PIN_TRIG_3 A2
#define PIN_TRIG_4 A3
#define led_vm_1 2
#define led_vm_2 3
#define led_vm_3 4
#define led_vm_4 5
#define led_vd_1 6
#define led_vd_2 7
#define led_vd_3 8
#define led_vd_4 9
const int Pinos[8] = {2, 3, 4, 5, 6, 7, 8, 9};
int distanciaCM_1, distanciaCM_2, distanciaCM_3, distanciaCM_4 = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte quadrado[8] = {
0b11111,
0b10001,
0b10001,
0b10001,
0b10001,
0b10001,
0b11111,
0b00000,
};
byte quadradox[8] = {
0b11111,
0b10001,
0b11011,
0b10101,
0b11011,
0b10001,
0b11111,
0b00000,
};
void setup() {
lcd.init();
lcd.createChar(0, quadrado);
lcd.createChar(1, quadradox);
lcd.setBacklight(HIGH);
for(int s = 2; s < 10; s++) {
pinMode(Pinos[s], OUTPUT);
}
pinMode(PIN_ECHO_1, INPUT);
pinMode(PIN_ECHO_2, INPUT);
pinMode(PIN_ECHO_3, INPUT);
pinMode(PIN_ECHO_4, INPUT);
pinMode(PIN_TRIG_1, OUTPUT);
pinMode(PIN_TRIG_2, OUTPUT);
pinMode(PIN_TRIG_3, OUTPUT);
pinMode(PIN_TRIG_4, OUTPUT);
}
void loop() {
int n_ocup = 0;
digitalWrite(PIN_TRIG_1, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_1, LOW);
int duration1 = pulseIn(PIN_ECHO_1, HIGH);
distanciaCM_1 = (duration1 / 58);
digitalWrite(PIN_TRIG_2, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_2, LOW);
int duration2 = pulseIn(PIN_ECHO_2, HIGH);
distanciaCM_2 = (duration2 / 58);
digitalWrite(PIN_TRIG_3, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_3, LOW);
int duration3 = pulseIn(PIN_ECHO_3, HIGH);
distanciaCM_3 = (duration3 / 58);
digitalWrite(PIN_TRIG_4, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG_4, LOW);
int duration4 = pulseIn(PIN_ECHO_4, HIGH);
distanciaCM_4 = (duration4 / 58);
delay(3000);
//vaga 1
if(distanciaCM_1 < 181){
int vaga1O = 1;
n_ocup += vaga1O;
lcd.setCursor(0,1);
lcd.write(byte(1));
digitalWrite(led_vd_1, 0);
digitalWrite(led_vm_1, 1);
}
else if(distanciaCM_1 > 180){
int vaga1L = 0;
n_ocup += vaga1L;
lcd.setCursor(0,1);
lcd.write(byte(0));
digitalWrite(led_vd_1, 1);
digitalWrite(led_vm_1, 0);
}
//vaga 2
if(distanciaCM_2 < 181){
int vaga2O = 1;
n_ocup += vaga2O;
lcd.setCursor(1,1);
lcd.write(byte(1));
digitalWrite(led_vd_2, 0);
digitalWrite(led_vm_2, 1);
}
else if(distanciaCM_2 > 180){
int vaga2L = 0;
n_ocup += vaga2L;
lcd.setCursor(1,1);
lcd.write(byte(0));
digitalWrite(led_vd_2, 1);
digitalWrite(led_vm_2, 0);
}
//vaga 3
if(distanciaCM_3 < 181){
int vaga3O = 1;
n_ocup += vaga3O;
lcd.setCursor(2,1);
lcd.write(byte(1));
digitalWrite(led_vd_3, 0);
digitalWrite(led_vm_3, 1);
}
else if(distanciaCM_3 > 180){
int vaga3L = 0;
n_ocup += vaga3L;
lcd.setCursor(2,1);
lcd.write(byte(0));
digitalWrite(led_vd_3, 1);
digitalWrite(led_vm_3, 0);
}
//vaga 4
if(distanciaCM_4 < 181){
int vaga4O = 1;
n_ocup += vaga4O;
lcd.setCursor(3,1);
lcd.write(byte(1));
digitalWrite(led_vd_4, 0);
digitalWrite(led_vm_4, 1);
}
else if(distanciaCM_4 > 180){
int vaga4L = 0;
n_ocup += vaga4L;
lcd.setCursor(3,1);
lcd.write(byte(0));
digitalWrite(led_vd_4, 1);
digitalWrite(led_vm_4, 0);
}
lcd.setCursor(0,0);
lcd.print("1234 livres ");
int n_livres = 4 - n_ocup;
lcd.print(n_livres);
lcd.setCursor(6,1);
lcd.print("ocupadas ");
lcd.print(n_ocup);
delay(500);
}