#include <WiFi.h>
#include <ThingSpeak.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// ================= LCD =================
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ================= WIFI =================
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ================= ThingSpeak =================
unsigned long channelID = 3279211; // Ganti channel ID
const char* writeAPIKey = "7X0CCSJVKZREB2IL"; // Ganti Write API Key
WiFiClient client;
// ================= Ultrasonic =================
#define TRIG 5
#define ECHO 18
long durasi;
float jarak;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
lcd.init();
lcd.backlight();
// Koneksi WiFi
lcd.setCursor(0,0);
lcd.print("Connecting WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
lcd.clear();
lcd.print("WiFi Connected");
delay(1500);
ThingSpeak.begin(client);
}
void loop() {
// Trigger ultrasonic
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
durasi = pulseIn(ECHO, HIGH);
jarak = durasi * 0.034 / 2;
// ================= LCD =================
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Jarak:");
lcd.print(jarak);
lcd.print(" cm");
// ================= Kirim ke ThingSpeak =================
ThingSpeak.setField(1, jarak);
int x = ThingSpeak.writeFields(channelID, writeAPIKey);
if(x == 200){
Serial.println("Data terkirim ke ThingSpeak");
lcd.setCursor(0,1);
lcd.print("Upload OK");
} else {
Serial.println("Gagal kirim");
lcd.setCursor(0,1);
lcd.print("Upload Gagal");
}
// Delay minimal ThingSpeak
delay(15000);
}