#include "WiFi.h"
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* thingSpeakAddress = "api.thingspeak.com";
const char* writeAPIKey = "OMP7PPMDBEIHA8W3";
const char* jarak = "field1";
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define ECHO_PIN 2
#define TRIG_PIN 15
#define ledMerah 12
#define ledKuning 13
#define ledHijau 14
#define pinBuzzer 5
void allOff() {
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledHijau, LOW);
digitalWrite(pinBuzzer, LOW);
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Ketinggian Air:");
lcd.setCursor(0, 1);
lcd.print("cm");
pinMode(pinBuzzer, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
Serial.begin(115200);
WiFi.disconnect();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
float readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop() {
float distance = readDistance();
float level = 400 - distance;
lcd.setCursor(15, 0); // Adjusted cursor position for clearer display
lcd.print(" "); // Clear previous data
lcd.setCursor(15, 0);
lcd.print(level);
Serial.print("Ketinggian Air: ");
Serial.print(level);
Serial.println(" cm");
if (level > 200) {
allOff();
digitalWrite(ledMerah, HIGH);
delay(200);
tone(pinBuzzer, 1000);
} else if (level > 100) {
allOff();
digitalWrite(ledKuning, HIGH);
delay(200);
tone(pinBuzzer, 500);
} else {
allOff();
digitalWrite(ledHijau, HIGH);
noTone(pinBuzzer);
}
if (isnan(level)) {
Serial.println("Failed to read distance!");
return;
}
sendToThingSpeak(level);
delay(15000); // Delay between ThingSpeak updates (15 seconds)
}
void sendToThingSpeak(float level) {
if (client.connect(thingSpeakAddress, 80)) {
String request = "/update?";
request += "key=";
request += writeAPIKey;
request += "&";
request += jarak;
request += "=";
request += String(level);
Serial.println("Sending data to ThingSpeak:");
Serial.println(request);
client.print(String("GET ") + request + " HTTP/1.1\r\n" +
"Host: " + thingSpeakAddress + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("Data sent to ThingSpeak");
client.stop();
} else {
Serial.println("Failed to connect to ThingSpeak server!");
}
}