#include <WiFi.h>
#include <TM1637.h>
#define motion0 4
#define motion1 0
#define motion2 2
#define motion3 15
#define red 26
#define yel 27
#define grn 14
#define clock 33
#define data 25
#define buzzer 32
int status0 = 0;
int status1 = 0;
int status2 = 0;
int status3 = 0;
int valred = 0;
int valyel = 0;
int valgrn = 0;
int viocount = 0;
int repcount = 0;
int stall = 0;
TM1637 dp;
void setup() {
Serial.begin(115200);
Serial.print("Initializing");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("\nSystem online!\n");
pinMode(motion0, INPUT);
pinMode(motion1, INPUT);
pinMode(motion2, INPUT);
pinMode(motion3, INPUT);
pinMode(red, OUTPUT);
pinMode(yel, OUTPUT);
pinMode(grn, OUTPUT);
pinMode(buzzer, OUTPUT);
dp.begin(clock, data, 4);
dp.displayClear();
dp.setBrightness(7);
}
void loop() {
while (valred < 4) {
digitalWrite(red, HIGH);
dp.displayInt(4 - valred);
status0 = digitalRead(motion0);
if (status0 == 1) {
viocount++;
Serial.print("Violation detected! (");
Serial.print(viocount);
Serial.print(")\n");
tone(buzzer, 100, 150);
delay(250);
tone(buzzer, 100, 150);
delay(250);
tone(buzzer, 100, 150);
}
delay(1000);
valred += 1;
}
digitalWrite(red, LOW);
valred = 0;
status1 = digitalRead(motion1);
status2 = digitalRead(motion2);
status3 = digitalRead(motion3);
repcount++;
if (status3 == 1) {
Serial.print("High density, green duration set to 16s. (");
Serial.print(repcount);
Serial.print(")\n");
stall = 12;
} else if (status2 == 1) {
Serial.print("Medium density, green duration set to 12s. (");
Serial.print(repcount);
Serial.print(")\n");
stall = 8;
} else if (status1 == 1) {
Serial.print("Low density, green duration set to 8s. (");
Serial.print(repcount);
Serial.print(")\n");
stall = 4;
} else {
Serial.print("No density, green duration set to 4s. (");
Serial.print(repcount);
Serial.print(")\n");
stall = 0;
}
while (valyel < 2) {
digitalWrite(yel, HIGH);
dp.displayInt(2 - valyel);
delay(1000);
valyel += 1;
}
digitalWrite(yel, LOW);
valyel = 0;
while (valgrn < 4 + stall) {
digitalWrite(grn, HIGH);
dp.displayInt(4 + stall - valgrn);
delay(1000);
valgrn += 1;
}
digitalWrite(grn, LOW);
valgrn = 0;
stall = 0;
while (valyel < 2) {
digitalWrite(yel, HIGH);
dp.displayInt(2 - valyel);
delay(1000);
valyel += 1;
}
digitalWrite(yel, LOW);
valyel = 0;
}