#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6n6O-djdI"
#define BLYNK_TEMPLATE_NAME "TEST 1"
#define BLYNK_AUTH_TOKEN "FuqEeWsIa_cXsQaE-uSz4dTma0PifAP0"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define TRIG_PIN 13
#define ECHO_PIN 12
#define BUZZER_PIN 19
const int thresholdHeight = 30; // Ambang batas level air rendah (dalam cm)
char ssid [] = "Wokwi-GUEST";
char pass [] ="";
BlynkTimer timer;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Inisialisasi OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C adalah alamat I2C OLED
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Berhenti jika gagal
}
display.display(); // Menampilkan buffer awal
delay(2000); // Tunggu beberapa detik
display.clearDisplay(); // Bersihkan layar
display.setTextSize(1); // Ukuran teks normal
display.setTextColor(SSD1306_WHITE); // Warna teks putih
// Menampilkan judul
display.setCursor(0, 0);
display.println("TANGKI AIR");
display.println("JAROT WIWOHO");
delay(2000);
display.display(); // Menampilkan teks di OLED
Blynk.begin (BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval (1000L, sendData);
}
void loop(){
Blynk.run();
timer.run();
}
void sendData() {
String textStatus;
long duration, distance;
// Mengirim pulsa ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Menghitung durasi echo
duration = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak (dalam cm)
distance = duration * 0.034 / 2;
// Menampilkan hasil pada OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("TANGKI AIR");
display.setCursor(0, 20);
display.print("Ketinggian: ");
display.print(distance);
display.print(" cm");
display.display(); // Update layar OLED
// Cek level air
if (distance < thresholdHeight) {
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
} else {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
}
delay(1000); // Delay sebelum pengukuran berikutnya
//Kirim Data Ke Blynk
textStatus = "Tangki Air";
Blynk.virtualWrite(V0, textStatus);
//Data Distance
Blynk.virtualWrite(V1, distance);
}