#define BLYNK_TEMPLATE_ID "TMPL6wIKYMxbe" #define BLYNK_TEMPLATE_NAME "WaterTester" #define BLYNK_AUTH_TOKEN "v-1Offttn2hvVofsSGHiiz1jDcSTrfUm" #define BLYNK_PRINT Serial #include #include char auth[] = BLYNK_AUTH_TOKEN; // Auth Token char ssid[] = "yuhu"; char pass[] = "AnnaSalsabila"; float ParameterKekeruhan = 0-5; // Parameter kekeruhan float ParameterTDS = 0.2-0.5; // Parameter TDS float lastKekeruhan = 0; // Nilai terakhir kekeruhan float lastTDS = 0; // Nilai terakhir TDS BlynkTimer timer; // Callback function untuk pengiriman data sensor ke Blynk void sendSensor() { if (Serial.available()) { // Jika data tersedia di buffer serial String dataReceived = Serial.readStringUntil('\n'); // Baca data hingga karakter newline float kekeruhan = dataReceived.substring(0, dataReceived.indexOf(',')).toFloat(); // Parse data kekeruhan float tdsValue = dataReceived.substring(dataReceived.indexOf(',') + 1).toFloat(); // Parse data TDS // Jika data yang diterima valid (bukan 0) if (kekeruhan != 0 && tdsValue != 0) { lastKekeruhan = kekeruhan; // Simpan nilai terakhir kekeruhan lastTDS = tdsValue; // Simpan nilai terakhir TDS } } // Kirim data terakhir ke Blynk Blynk.virtualWrite(V0, lastKekeruhan); // Kirim data kekeruhan terakhir ke Virtual pin V0 di Blynk Blynk.virtualWrite(V1, lastTDS); // Kirim data TDS terakhir ke Virtual pin V1 di Blynk // Kirim status kekeruhan terakhir ke Blynk if (lastKekeruhan > ParameterKekeruhan) { Blynk.virtualWrite(V2, "Air Keruh"); } else { Blynk.virtualWrite(V2, "Air Tidak Keruh"); } // Kirim status TDS terakhir ke Blynk if (lastTDS > ParameterTDS) { Blynk.virtualWrite(V3, "Kaporit Tinggi"); } else { Blynk.virtualWrite(V3, "Kaporit Normal"); } } void setup() { Serial.begin(9600); // Baud rate serial monitor Blynk.begin(auth, ssid, pass); // Mulai Blynk timer.setInterval(20L, sendSensor); // Set interval timer untuk pengiriman data 20ms } void loop() { Blynk.run(); // Menjalankan Blynk timer.run(); // Menjalankan timer }