#define BLYNK_TEMPLATE_ID "TMPL63HgQ79QU"
#define BLYNK_TEMPLATE_NAME "Esp"
#define BLYNK_AUTH_TOKEN "jAW4yTuw7kYvUMSGlAfh0d2SXNU8W9Zr"
#include <ESP32Servo.h>
#include <WiFi.h>
#include <LiquidCrystal_I2C.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
Servo servo1;
#define ldrPin1 34 // LDR sensor pin for parking space 1
#define ldrPin2 35 // LDR sensor pin for parking space 2
#define ldrPin3 33 // LDR sensor pin for parking space 3
#define ldrPin4 32 // LDR sensor pin for parking space 4
#define servoPin 13 // Servo motor pin
#define ledPin 12 // LED pin
BLYNK_CONNECTED() {
Blynk.syncVirtual(V1);
Blynk.syncVirtual(V2);
Blynk.syncVirtual(V3);
Blynk.syncVirtual(V4);
}
void loop() {
// put your main code here, to run repeatedly:
a=check(TRIG_A,ECHO_A);
if(a==0){
Blynk.virtualWrite(V1, 0 );
}
else{
Blynk.virtualWrite(V1, 1);
}
b=check(TRIG_B,ECHO_B);
if(b==0){
Blynk.virtualWrite(V2, 0 );
}
else{
Blynk.virtualWrite(V2, 1);
}
c=check(TRIG_C,ECHO_C);
if(c==0){
Blynk.virtualWrite(V3, 0 );
}
else{
Blynk.virtualWrite(V3, 1);
}
d=check(TRIG_D,ECHO_D);
if(d==0){
Blynk.virtualWrite(V4, 0 );
}
else{
Blynk.virtualWrite(V4, 1);
}
Serial.printf("%d %d %d %d \n",a,b,c,d);
Slot=a+b+c+d;
Serial.printf("slots free=%d \n",Slot);
Blynk.virtualWrite(V0, Slot);
delay(2000); // this speeds up the simulation
}
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27 for I2C
Servo myservo;
boolean full = 0;
BLYNK_WRITE(V4){
int Val = param.asInt();
Serial.print("V4:");
Serial.print(Val);
if(Val)
{
myservo.write(90);
delay(1000);
}
else
{
myservo.write(0);
delay(1000);
}
}
void setup() {
Serial.begin(9600);
pinMode(ldrPin1, INPUT);
pinMode(ldrPin2, INPUT);
pinMode(ldrPin3, INPUT);
pinMode(ldrPin4, INPUT);
pinMode(ledPin, OUTPUT);
myservo.attach(servoPin);
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Smart Parking");
delay(1000);
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
boolean EntanceIR = digitalRead(ldrPin1);
boolean ExitIR = digitalRead(ldrPin2);
boolean ldrValue1 = digitalRead(ldrPin3);
boolean ldrValue2 = digitalRead(ldrPin4);
Blynk.virtualWrite(V1, int(ldrValue1)); // Initial value for the slider
Blynk.virtualWrite(V2, int(ldrValue2)); // Initial value for the slider
//V2
if (ldrValue1 && ldrValue2)
{
digitalWrite(ledPin, HIGH);
full = 1;
lcd.print("Full!");}
else
{digitalWrite(ledPin, LOW);
full=0;
lcd.print("Empty!");
}
if(EntanceIR && ExitIR)
{
// Blynk.virtualWrite(V3, 0); //update button state
myservo.write(0);
}
else
{myservo.write(90);
//V3=1
// Blynk.virtualWrite(v3, 1); //update button state
}
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("LDR1: ");
// lcd.print(ldrValue1);
// lcd.setCursor(0, 1);
// lcd.print("LDR2: ");
// lcd.print(ldrValue2);
// lcd.setCursor(0, 2);
// lcd.print("LDR3: ");
// lcd.print(ldrValue3);
// lcd.setCursor(0, 3);
// lcd.print("LDR4: ");
// lcd.print(ldrValue4);
delay(100);
lcd.clear();
timer.run();
}