uint8_t cancela1 = 0;
uint8_t cancela2 = 0;
int BOTservo1 = 23;
int BOTservo2 = 19;
int BOT1 = 33;
int BOT2 = 25;
int BOT3 = 26;
int BOT4 = 27;
int BOT5 = 14;
int BOT6 = 12;
int pot = 32;
int S0 = 16;
int S1 = 4;
int S2 = 2;
int S3 = 15;
int EN = 17;
#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD(0x27,20,4);
const int Servo2Pin = 18;
const int Servo1Pin = 5;
Servo ServoMotor;
Servo ServoMotor1;
int posGraus = 0;
bool statusbot1 = 0;
bool statusbot2 = 0;
bool vaga1 = 0;
bool vaga2 = 0;
bool vaga3 = 0;
bool vaga4 = 0;
bool vaga5 = 0;
bool vaga6 = 0;
int cont = 0;
int cont2 = 0;
int vagaspcd = 0;
uint8_t Numeros[16][4]={
{0,0,0,0},
{1,0,0,0},
{0,1,0,0},
{1,1,0,0},
{0,0,1,0},
{1,0,1,0},
{0,1,1,0},
{1,1,1,0},
{0,0,0,1},
{1,0,0,1},
{0,1,0,1},
{1,1,0,1},
{0,0,1,1},
{1,0,1,1},
{0,1,1,1},
{1,1,1,1},
};
void setup()
{
ServoMotor.attach(Servo2Pin);
ServoMotor1.attach(Servo1Pin);
LCD.init ();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print ("11 09 24");
LCD.setCursor(0,1);
LCD.print ("senai Roberto S.");
LCD.setCursor(0,2);
LCD.print ("PROF: Rebeca");
LCD.setCursor(0,3);
LCD.print ("PROF: Franzoni");
delay (5000);
LCD.clear();
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(EN, OUTPUT);
pinMode(BOTservo1, INPUT);
pinMode(BOTservo2, INPUT);
pinMode(BOT1, INPUT);
pinMode(BOT2, INPUT);
pinMode(BOT3, INPUT);
pinMode(BOT4, INPUT);
pinMode(BOT5, INPUT);
pinMode(BOT6, INPUT);
Serial.begin(115200);
LCD.setCursor(0,0);
LCD.print ("ESTACIONAMENTO");
LCD.setCursor(0,1);
LCD.print ("Vagas");
LCD.setCursor(10,1);
LCD.print ("PCD");
LCD.setCursor(0,2);
LCD.print ("Ocup :");
LCD.setCursor(10,2);
LCD.print ("Ocup :");
LCD.setCursor(0,3);
LCD.print ("Livre :");
LCD.setCursor(10,3);
LCD.print ("Livre :");
}
void loop()
{
Cancelas();
potenciometro();
multiplexador(cont);
botoes();
visor();
delay(5);
cont++;
if ( cont == 16 )cont = 0;
cont2++ ;
}
void Cancelas()
{
if (digitalRead(BOTservo2) == 1 && statusbot2 == 0)
{
statusbot2 = 1;
if (cancela1 == 90) cancela1 = 0;
else cancela1 = 90;
}
if (digitalRead(BOTservo2) == 00 && statusbot2 == 1) statusbot2 = 0;
ServoMotor.write(cancela1);
if (digitalRead(BOTservo1) == 1 && statusbot1 == 0)
{
statusbot1 = 1;
if (cancela2 == 90) cancela2 = 0;
else cancela2 = 90;
}
if (digitalRead(BOTservo1) == 00 && statusbot1 == 1) statusbot1 = 0;
ServoMotor1.write(cancela2);
}
void potenciometro()
{
int potvalue = analogRead(pot);
vagaspcd = map(potvalue ,0,4095,0,3);
}
void multiplexador(int vaca)
{
digitalWrite(EN, 1);
digitalWrite(S0,Numeros[vaca][0]);
digitalWrite(S1,Numeros[vaca][1]);
digitalWrite(S2,Numeros[vaca][2]);
digitalWrite(S3,Numeros[vaca][3]);
delay (1);
if(vaca == 0 && vaga1 == 1) digitalWrite(EN, 0);
if(vaca == 1 && vaga1 == 0 && vagaspcd < 1) digitalWrite(EN, 0);
if(vaca == 2 && vaga1 == 0 && vagaspcd >= 1) digitalWrite(EN, 0);
if(vaca == 3 && vaga2 == 1) digitalWrite(EN, 0);
if(vaca == 4 && vaga2 == 0 && vagaspcd < 2) digitalWrite(EN, 0);
if(vaca == 5 && vaga2 == 0 && vagaspcd >= 2) digitalWrite(EN, 0);
if(vaca == 6 && vaga3 == 1) digitalWrite(EN, 0);
if(vaca == 7 && vaga3 == 0 && vagaspcd < 3) digitalWrite(EN, 0);
if(vaca == 8 && vaga3 == 0 && vagaspcd >= 3) digitalWrite(EN, 0);
if(vaca == 9 && vaga4 == 1) digitalWrite(EN, 0);
if(vaca == 10 && vaga4 == 0) digitalWrite(EN, 0);
if(vaca == 11 && vaga5 == 1) digitalWrite(EN, 0);
if(vaca == 12 && vaga5 == 0) digitalWrite(EN, 0);
if(vaca == 13 && vaga6 == 1) digitalWrite(EN, 0);
if(vaca == 14 && vaga6 == 0) digitalWrite(EN, 0);
}
void botoes()
{
if(digitalRead(BOT1) == 1) vaga1 =1;
if(digitalRead(BOT1) == 0) vaga1 =0;
if(digitalRead(BOT2) == 1) vaga2 =1;
if(digitalRead(BOT2) == 0) vaga2 =0;
if(digitalRead(BOT3) == 1) vaga3 =1;
if(digitalRead(BOT3) == 0) vaga3 =0;
if(digitalRead(BOT4) == 1) vaga4 =1;
if(digitalRead(BOT4) == 0) vaga4 =0;
if(digitalRead(BOT5) == 1) vaga5 =1;
if(digitalRead(BOT5) == 0) vaga5 =0;
if(digitalRead(BOT6) == 1) vaga6 =1;
if(digitalRead(BOT6) == 0) vaga6 =0;
}
void visor()
{
if(cont2 == 100)
{
int vgol = vaga1 + vaga2 + vaga3 + vaga4 + vaga5 + vaga6;
int vgal = 6 - vgol - vagaspcd;
int hj = 3 - vagaspcd;
LCD.setCursor(6,2);
LCD.print (vgol);
LCD.setCursor(18,2);
LCD.print (vagaspcd);
LCD.setCursor(7,3);
LCD.print (vgal);
LCD.setCursor(18,3);
LCD.print (hj);
cont2 = 0;
Serial.println("vgol: "+String(vgol)+" vagaspcd: "+String(vagaspcd)+" vgal: "+String(vgal)+" hj: "+String(hj));
}
}