#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6vn_PoH-q"
#define BLYNK_TEMPLATE_NAME "Kontrol Beban"
#define BLYNK_AUTH_TOKEN "DVwwv_SSHAEiJWnDRJbvRbBS-wMMSZc1"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const int Merah = 2;
const int Hijau = 15;
const int buzz = 13;
unsigned long waktuAwalMerah = 0;
unsigned long waktuAwalHijau = 0;
unsigned long waktuAwalBuzzer = 0;
float detikMerah;
float detikHijau;
float detikBuzzer;
byte mulaiWaktuMerah = 0;
byte mulaiWaktuHijau = 0;
byte mulaiWaktuBuzzer = 0;
int ledM = 0;
int ledH = 0;
int buzzer = 0;
int total = 0;
int slider = 0;
int jumlahToken = 0;
bool start = 0;
void token(){
Blynk.virtualWrite(V7, "Token Habis, Mohon Isi Ulang Token");
}
void tokenAda(){
Blynk.virtualWrite(V7,"Token tersisa " + String(jumlahToken));
}
BLYNK_WRITE(V9){
slider = param.asInt();
}
BLYNK_WRITE(V0){
int pinValue = param.asInt();
if(pinValue == 1){
jumlahToken = slider;
}
}
BLYNK_WRITE(V3){
int pinValue = param.asInt();
if(pinValue == 1){
start = 1;
if(total != jumlahToken){
digitalWrite(Hijau, HIGH);
ledH++;
jumlahToken--;
mulaiWaktuHijau = 1;
tokenAda();
} else {
token();
}
} else {
mulaiWaktuHijau = 0;
digitalWrite(Hijau, LOW);
}
}
BLYNK_WRITE(V1){
int pinValue = param.asInt();
if(pinValue == 1){
start = 1;
if(total != jumlahToken){
digitalWrite(Merah, HIGH);
ledM++;
jumlahToken--;
mulaiWaktuMerah = 1;
tokenAda();
} else {
token();
}
} else {
mulaiWaktuMerah = 0;
digitalWrite(Merah, LOW);
}
}
BLYNK_WRITE(V2){
int pinValue = param.asInt();
if(pinValue == 1){
start = 1;
if(total != jumlahToken){
tone(buzz, 1000);
buzzer++;
jumlahToken--;
mulaiWaktuBuzzer = 1;
tokenAda();
} else {
token();
}
} else {
mulaiWaktuBuzzer = 0;
noTone(buzz);
}
}
void hitungWaktu(){
if(millis() > waktuAwalMerah + 1000){
if(mulaiWaktuMerah == 1){
detikMerah++;
waktuAwalMerah = millis();
}
}
if(millis() > waktuAwalHijau + 1000){
if(mulaiWaktuHijau == 1){
detikHijau++;
waktuAwalHijau = millis();
}
}
if(millis() > waktuAwalBuzzer + 1000){
if(mulaiWaktuBuzzer == 1){
detikBuzzer++;
waktuAwalBuzzer = millis();
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Blynk.begin(auth,ssid,pass);
pinMode(Merah, OUTPUT);
pinMode(Hijau, OUTPUT);
pinMode(buzz, OUTPUT);
}
void loop() {
hitungWaktu();
Blynk.virtualWrite(V4,String(ledH) + "x, " + String(detikHijau/60) + " min");
Blynk.virtualWrite(V5,String(ledM) + "x, " + String(detikMerah/60) + " min");
Blynk.virtualWrite(V6,String(buzzer) + "x, " + String(detikBuzzer/60) + " min");
Serial.println("Jumlah token anda : "+ String(jumlahToken) + " token");
float total1 = detikMerah/60;
float total2 = detikHijau/60;
float total3 = detikBuzzer/60;
Blynk.virtualWrite(V8, String(ledH+ledM+buzzer) + "x" + " ," + String(total1 + total2 + total3) + " min");
Blynk.run();
}