#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#define BLYNK_TEMPLATE_ID "TMPL6hyO6S7m7"
#define BLYNK_TEMPLATE_NAME "Smart Dustbin"
#define BLYNK_AUTH_TOKEN "-_P7DltfTlR75K9Sok3Kg9D_EQ7pCjwU"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const uint8_t trigger1 = 25;
const uint8_t trigger2 = 27;
const uint8_t echo1 = 26;
const uint8_t echo2 = 14;
const uint8_t servoPin = 12;
const uint8_t buzzer = 2;
long durasi1;
long durasi2;
int jarak1;
int jarak2;
int levelsampah;
int pulseTime;
void bukatutup(void *pvParameters);
void deteksiisi(void *pvParameters);
void Task_Blynk_Loop(void *pvParameters);
void setup() {
xTaskCreatePinnedToCore(bukatutup, "Task1", 8000, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(deteksiisi, "Task2", 8000, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(Task_Blynk_Loop, "loop1", 4096, NULL, 1, NULL, 1);
Serial.begin(115200);
pinMode(trigger1, OUTPUT);
pinMode(trigger2, OUTPUT);
pinMode(echo1, INPUT);
pinMode(echo2, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(servoPin, OUTPUT);
}
void loop() {}
void Task_Blynk_Loop(void *pvParameters) {
(void)pvParameters;
Blynk.begin(auth, ssid, pass);
while (!Blynk.connected()) {
}
Serial.println();
Serial.println("Blynk Connected");
Serial.println("Blynk Loop Task Started");
while (1) {
Blynk.run();
delay(1);
}
}
void bukatutup(void *pvParameters) {
while (1) {
digitalWrite(trigger1, LOW);
delayMicroseconds(2);
digitalWrite(trigger1, HIGH);
delayMicroseconds(10);
digitalWrite(trigger1, LOW);
durasi1 = pulseIn(echo1, HIGH);
jarak1 = (durasi1 * 0.034) / 2;
if (jarak1 <= 15) {
Serial.println("Terbuka");
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
for (pulseTime = 500; pulseTime <= 2350; pulseTime += 50) {
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
for (pulseTime = 2350; pulseTime >= 500; pulseTime -= 50) {
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}
Blynk.virtualWrite(V0, jarak1);
Serial.print("Jarak 1: ");
Serial.print(jarak1);
Serial.println(" cm");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
void deteksiisi(void *pvParameters) {
while (1) {
digitalWrite(trigger2, LOW);
delayMicroseconds(2);
digitalWrite(trigger2, HIGH);
delayMicroseconds(10);
digitalWrite(trigger2, LOW);
durasi2 = pulseIn(echo2, HIGH);
jarak2 = (durasi2 * 0.034) / 2;
levelsampah = map(jarak2, 0, 23, 100, 0);
Blynk.virtualWrite(V1, levelsampah);
if (jarak2 <= 3) {
Serial.print("Penuh");
Blynk.virtualWrite(V0, HIGH);
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}