#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
uint8_t numeros [16] {
0b00000000,
0b00001000,
0b00000100,
0b00001100,
0b00000010,
0b00001010,
0b00000110,
0b00001110,
0b00000001,
0b00001001,
0b00000101,
0b00001101,
0b00000011,
0b00001011,
0b00000111,
0b00001111
};
int x = 0;
int bv1 = 12; // entradas botões das vagas
int bv2 = 14;
int bv3 = 27;
int bv4 = 26;
int bv5 = 25;
int bv6 = 33;
bool leiturabv1 = 1;
bool leiturabv2 = 1;
bool leiturabv3 = 1;
bool leiturabv4 = 1;
bool leiturabv5 = 1;
bool leiturabv6 = 1;
int vocupadas = 0;
int velivres = 0;
int veocupadas = 0;
Servo Entrada; // entradas botões e contadores para o servo
Servo Saida;
int bc1 = 19;
int bc2 = 23;
bool leiturabc1 = 0;
bool leiturabc2 = 0;
uint8_t contadorbc1 = 0;
uint8_t contadorbc2 = 0;
int pot = 32; // entradas potenciômetro
int vagasespeciais = 0; //Para passar o potenciometro para as vagas
bool l1 = 0;
bool l2 = 0;
bool l3 = 0;
bool l4 = 0;
bool l5 = 0;
bool l6 = 0;
bool le6 = 0;
bool le5 = 0;
bool le4 = 0;
int esp4 = 0;
int esp5 = 0;
int esp6 = 0;
bool s0 = 16; //multiplexador
bool s1 = 4;
bool s2 = 2;
bool s3 = 15;
int en = 17;
void setup()
{
Entrada.attach(18);
Saida.attach(5);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(bc1, INPUT); // entradas botões e contadores para o servo
pinMode(bc2, INPUT);
pinMode(bv1, INPUT); // entradas botões das vagas
pinMode(bv2, INPUT);
pinMode(bv3, INPUT);
pinMode(bv4, INPUT);
pinMode(bv5, INPUT);
pinMode(bv6, INPUT);
pinMode(s0, OUTPUT); // multiplexador
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("SENAI CFP 1.01");
lcd.setCursor(2,1);
lcd.print("TEC. MECATRONICA");
lcd.setCursor(4,2);
lcd.print("3AT - SEMB2");
lcd.setCursor(4,3);
lcd.print("Felipe Simoes");
delay(1000);
lcd.clear();
}
void loop()
{
leiturabc1 = digitalRead(bc1); // entradas botões e contadores para o servo
leiturabc2 = digitalRead(bc2);
if (leiturabc1 == HIGH) // contador botão 1
{
delay(100);
contadorbc1++;
Serial.println("Contador botão 1: " + String(contadorbc1));
}
if (leiturabc2 == HIGH) // contador botão 2
{
delay(100);
contadorbc2++;
Serial.println("Contador botão 2: " + String(contadorbc2));
Serial.println("Catraca de entrada aberta");
}
if (contadorbc1%2 == 0)
{
Entrada.write(90);
delay(100);
Serial.println("Catraca de entrada aberta");
}
else
{
Entrada.write(0);
delay(100);
Serial.println("Catraca de entrada fechada");
}
if (contadorbc2%2 == 0)
{
Saida.write(90);
delay(100);
Serial.println("Catraca de saída aberta");
}
else
{
Saida.write(0);
delay(100);
Serial.println("Catraca de saída fechada");
}
// POTENCIÔMETRO
int potValue = analogRead(pot);
int potenciometro = map(potValue,0,4095,0,3);
Serial.println("Quantidade de vagas especiais: " + String(potenciometro));
delay(1000);
// VAGAS
leiturabv1 = digitalRead(bv1); // entradas botões das vagas
leiturabv2 = digitalRead(bv2);
leiturabv3 = digitalRead(bv3);
leiturabv4 = digitalRead(bv4);
leiturabv5 = digitalRead(bv5);
leiturabv6 = digitalRead(bv6);
if (leiturabv1 == HIGH)
{
Serial.println("Vaga comum 1 ocupada");
l1 = 1;
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
int valor = analogRead(en);
Serial.println(valor);
delay(500);
}
else
{
l1 = 0;
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
int valor = analogRead(en);
Serial.println(valor);
}
if (leiturabv2 == HIGH)
{
Serial.println("Vaga comum 2 ocupada");
l2 = 1;
delay(500);
}
else
{
l2 = 0;
}
if (leiturabv3 == HIGH)
{
Serial.println("Vaga comum 3 ocupada");
l3 = 1;
delay(500);
}
else
{
l3 = 0;
}
////////////////////////////////////////////////////////////////
if (leiturabv6 == HIGH)
{
l6 = 1;
if (potenciometro >= 1)
{
Serial.println("Vaga especial 3 ocupada");
le6 = 1;
}
else
{
Serial.println("Vaga comum 6 ocupada");
le6 = 0;
}
delay(500);
}
else if (leiturabv6 == LOW)
{
le6 = 0;
l6 = 0;
if (potenciometro >= 1)
{
esp6 = 1;
}
else
{
esp6 = 0;
}
}
if (leiturabv5 == HIGH)
{
l5 = 1;
if (potenciometro >= 2)
{
Serial.println("Vaga especial 2 ocupada");
le5 = 1;
}
else
{
Serial.println("Vaga comum 5 ocupada");
le5 = 0;
}
delay(500);
}
else if (leiturabv5 == LOW)
{
le5 = 0;
l5 = 0;
if (potenciometro >= 2)
{
esp5 = 1;
}
else
{
esp5 = 0;
}
}
if (leiturabv4 == HIGH)
{
l4 = 1;
if (potenciometro == 3)
{
Serial.println("Vaga especial 1 ocupada");
le4 = 1;
}
else
{
Serial.println("Vaga comum 4 ocupada");
le4 = 0;
}
delay(500);
}
else if (leiturabv4 == LOW)
{
le4 = 0;
l4 = 0;
if (potenciometro == 3)
{
esp4 = 1;
}
else
{
esp4 = 0;
}
}
int vlivres = 6; // Total de vagas
vlivres = vlivres - (l1 + l2 + l3 + l4 + l5 + l6);
int vocupadas = 0;
vocupadas = vocupadas + l1 + l2 + l3 + l4 + l5 + l6;
int veocupadas = 0;
veocupadas = (le4 + le5 + le6);
int velivres = 0;
velivres = potenciometro - veocupadas;
Serial.println("VAGAS LIVRES: " + String(vlivres));
Serial.println("VAGAS OCUPADAS: " + String(vocupadas));
Serial.println("VAGAS ESPECIAIS LIVRES: " + String(velivres));
Serial.println("VAGAS ESPECIAIS OCUPADAS: " + String(veocupadas));
lcd.setCursor(0,0);
lcd.print("VAGAS LIVRES: " + String(vlivres)); // Começa LCD
lcd.setCursor(0,1);
lcd.print("VAGAS OCUPADAS: " + String(vocupadas));
lcd.setCursor(0,2);
lcd.print("VAGAS ESP. LIV.: " + String(velivres));
lcd.setCursor(0,3);
lcd.print("VAGAS ESP. OC.: " + String(veocupadas));
delay(100);
}
Loading
cd74hc4067
cd74hc4067