#define BLYNK_TEMPLATE_ID "TMPL3YdWHYcWw"
#define BLYNK_TEMPLATE_NAME "traffic diversion"
#define BLYNK_AUTH_TOKEN "qbjvHmjOvSiEX1S_e_JwO4ETtypHyHID"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "qbjvHmjOvSiEX1S_e_JwO4ETtypHyHID";
char ssid[] = "Realme";
char pass[] = "baby2005";
int signal1[] = {26, 25, 33};
int signal2[] = {19, 18, 5};
int signal3[] = {32, 3, 21};
int signal4[] = {17, 16, 15};
int switch1 = 34; // สวิตช์สำหรับแยก 1
int switch2 = 35; // สวิตช์สำหรับแยก 2
int switch3 = 37; // สวิตช์สำหรับแยก 3
int switch4 = 36; // สวิตช์สำหรับแยก 4
int redDelay = 20;
int yellowDelay = 20;
int green= 20;
int triggerpin1 = 13;
int echopin1 = 12;
int triggerpin2 = 27;
int echopin2 = 14;
int triggerpin3 = 22;
int echopin3 = 23;
int triggerpin4 = 2;
int echopin4 = 4;
long duration;
int S1, S2, S3, S4;
int t = 5;
vvoid setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
// กำหนดพินสำหรับไฟจราจร
for (int i = 0; i < 3; i++) {
pinMode(signal1[i], OUTPUT);
pinMode(signal2[i], OUTPUT);
pinMode(signal3[i], OUTPUT);
pinMode(signal4[i], OUTPUT);
}
// กำหนดพินสำหรับเซ็นเซอร์
pinMode(triggerpin1, OUTPUT);
pinMode(echopin1, INPUT);
pinMode(triggerpin2, OUTPUT);
pinMode(echopin2, INPUT);
pinMode(triggerpin3, OUTPUT);
pinMode(echopin3, INPUT);
pinMode(triggerpin4, OUTPUT);
pinMode(echopin4, INPUT);
// กำหนดพินสำหรับสวิตช์
pinMode(switch1, INPUT);
pinMode(switch2, INPUT);
pinMode(switch3, INPUT);
pinMode(switch4, INPUT);
}
void loop() {
Blynk.run();
// ตรวจสอบสถานะของสวิตช์แต่ละตัว
if (digitalRead(switch1) == HIGH) {
signal1Function(); // เปิดไฟแยก 1
}
else if (digitalRead(switch2) == HIGH) {
signal2Function(); // เปิดไฟแยก 2
}
else if (digitalRead(switch3) == HIGH) {
signal3Function(); // เปิดไฟแยก 3
}
else if (digitalRead(switch4) == HIGH) {
signal4Function(); // เปิดไฟแยก 4
}
// การอ่านระยะทางจากเซ็นเซอร์อัลตราโซนิก
S1 = readDistance(triggerpin1, echopin1);
S2 = readDistance(triggerpin2, echopin2);
S3 = readDistance(triggerpin3, echopin3);
S4 = readDistance(triggerpin4, echopin4);
if (S1 < t) {
signal1Function();
}
else if (S2 < t) {
signal2Function();
}
else if (S3 < t) {
signal3Function();
}
else if (S4 < t) {
signal4Function();
}
updateBlynk();
delay(100);
}
}
int readDistance(int triggerPin, int echoPin)
{
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
void signal1Function()
{
controlSignal(signal1, V1, V2, V3);
}
void signal2Function()
{
controlSignal(signal2, V4, V5, V6);
}
void signal3Function()
{
controlSignal(signal3, V7, V8, V9);
}
void signal4Function()
{
controlSignal(signal4, V10, V11, V12);
}
void controlSignal(int signalPins[], int vPinRed, int vPinYellow, int vPinGreen)
{
lowAll();
digitalWrite(signalPins[0], HIGH);
Blynk.virtualWrite(vPinRed, 255);
delay(redDelay);
digitalWrite(signalPins[0], LOW);
Blynk.virtualWrite(vPinRed, 0);
digitalWrite(signalPins[2], HIGH);
Blynk.virtualWrite(vPinGreen, 255);
delay(redDelay);
digitalWrite(signalPins[2], LOW);
Blynk.virtualWrite(vPinGreen, 0);
digitalWrite(signalPins[1], HIGH);
Blynk.virtualWrite(vPinYellow, 255);
delay(yellowDelay);
digitalWrite(signalPins[1], LOW);
Blynk.virtualWrite(vPinYellow, 0);
}
bool anyTraffic()
{
return (S1 < t || S2 < t || S3 < t || S4 < t);
}
void lowAll()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(signal1[0], HIGH);
digitalWrite(signal1[1], LOW);
digitalWrite(signal1[2], LOW);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal2[1], LOW);
digitalWrite(signal2[2], LOW);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal3[1], LOW);
digitalWrite(signal3[2], LOW);
digitalWrite(signal4[0], HIGH);
digitalWrite(signal4[1], LOW);
digitalWrite(signal4[2], LOW);
}
}
void updateBlynk()
{
Blynk.virtualWrite(V1, digitalRead(signal1[0]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V2, digitalRead(signal1[1]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V3, digitalRead(signal1[2]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V4, digitalRead(signal2[0]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V5, digitalRead(signal2[1]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V6, digitalRead(signal2[2]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V7, digitalRead(signal3[0]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V8, digitalRead(signal3[1]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V9, digitalRead(signal3[2]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V10, digitalRead(signal4[0]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V11, digitalRead(signal4[1]) == HIGH ? 255 : 0);
Blynk.virtualWrite(V12, digitalRead(signal4[2]) == HIGH ? 255 : 0);
}