#include<ESP32Servo.h>
// start display
const int seg_a = 13;
const int seg_b = 12;
const int seg_c = 14;
const int seg_d = 27;
const int seg_e = 26;
const int seg_f = 25;
const int seg_g = 33;
// end display
// start parking barrier
const int servo_pin = 15;
Servo parking_barrier;
int servo_state = 0;
// end parking barrier
// start distance sensor
const int trigger = 5;
const int echo = 18;
int previousDistance = 0;
// end distance sensor
// start button enter and exit
const int parking_enter = 2;
const int parking_exit = 4;
int state_servo = 0;
int i = 0;
// end button enter and exit
void display_begin(){
pinMode(seg_a, OUTPUT);
pinMode(seg_b, OUTPUT);
pinMode(seg_c, OUTPUT);
pinMode(seg_d, OUTPUT);
pinMode(seg_e, OUTPUT);
pinMode(seg_f, OUTPUT);
pinMode(seg_g, OUTPUT);
}
void display_on(bool a, bool b, bool c, bool d, bool e, bool f, bool g){
digitalWrite(seg_a, a);
digitalWrite(seg_b, b);
digitalWrite(seg_c, c);
digitalWrite(seg_d, d);
digitalWrite(seg_e, e);
digitalWrite(seg_f, f);
digitalWrite(seg_g, g);
}
void sensor_distance(){
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
void button_enter_exit(){
pinMode(parking_enter, INPUT_PULLUP);
pinMode(parking_exit, INPUT_PULLUP);
}
void setup() {
Serial.begin(115200);
display_begin();
parking_barrier.write(90);
Serial.println("Estacionamento Unifor");
Serial.println("Carros dentro do estacionamento: 0");
if(!digitalRead(parking_enter)){
state_servo = 1;
parking_barrier.write(90);
}
if(!digitalRead(parking_exit)){
state_servo = 2;
parking_barrier.write(90);
}
}
void loop() {
delay(10);
digitalWrite(trigger, HIGH);
delayMicroseconds(5);
digitalWrite(trigger, LOW);
int duration = pulseIn(echo, HIGH);
int distance = duration / 58;
if (!digitalRead(parking_enter)) {
if(i < 9){
i++;
delay(100);
for (int pos = 90; pos <= 180; pos++) {
parking_barrier.write(pos);
delay(15);
}
for (int pos = 180; pos >= 90; pos--) {
parking_barrier.write(pos);
delay(15);
}
}else{
Serial.println("Estacionamento cheio");
delay(1000);
}
}
if (!digitalRead(parking_exit)) {
if (i > 0) {
i--;
delay(100);
for (int pos = 90; pos <= 180; pos++) {
parking_barrier.write(pos);
delay(15);
}
for (int pos = 180; pos >= 90; pos--) {
parking_barrier.write(pos);
delay(15);
}
parking_barrier.write(90);
} else {
Serial.println("O Estacionamento está vazio");
delay(1000);
}
}
switch(i){
case 0: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, HIGH); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, LOW); break;
case 1: digitalWrite(seg_a, LOW); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, LOW); digitalWrite(seg_e, LOW); digitalWrite(seg_f, LOW); digitalWrite(seg_g, LOW); break;
case 2: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, LOW);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, HIGH); digitalWrite(seg_f, LOW); digitalWrite(seg_g, HIGH); break;
case 3: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, LOW); digitalWrite(seg_f, LOW); digitalWrite(seg_g, HIGH); break;
case 4: digitalWrite(seg_a, LOW); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, LOW); digitalWrite(seg_e, LOW); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, HIGH);break;
case 5: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, LOW); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, LOW); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, HIGH);break;
case 6: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, LOW); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, HIGH); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, HIGH); break;
case 7: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, LOW); digitalWrite(seg_e, LOW); digitalWrite(seg_f, LOW); digitalWrite(seg_g, LOW);break;
case 8: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, HIGH); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, HIGH);break;
case 9: digitalWrite(seg_a, HIGH); digitalWrite(seg_b, HIGH); digitalWrite(seg_c, HIGH);
digitalWrite(seg_d, HIGH); digitalWrite(seg_e, LOW); digitalWrite(seg_f, HIGH); digitalWrite(seg_g, HIGH);break;
}
}