#include <WiFi.h>
#include <ThingSpeak.h>
// Ultrasonic Sensor Pins
#define trigPin 5 // Trigger pin
#define echoPin 18 // Echo pin
// Wi-Fi
const char* ssid = "Wokwi-GUEST"; // Change as needed
const char* password = ""; // Change as needed
// ThingSpeak
WiFiClient client;
unsigned long channelID = 2869806; // Change to your ThingSpeak channel ID
const char* writeAPIKey = "6Y3JTFY09CMPEMNC"; // Change to your Write API Key
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
WiFi.begin(ssid, password);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("\nWi-Fi Connected");
ThingSpeak.begin(client);
}
void loop() {
long duration;
float distance;
// Trigger the ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read echo
duration = pulseIn(echoPin, HIGH);
// Calculate distance in cm
distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Check for space availability
String dockStatus;
if (distance < 100) { // Example threshold
dockStatus = "OCCUPIED";
} else {
dockStatus = "AVAILABLE";
}
Serial.print("Dock Status: ");
Serial.println(dockStatus);
// ✅ Send distance to ThingSpeak Field 2
ThingSpeak.setField(2, distance); // Sending only distance as you mentioned
int statusCode = ThingSpeak.writeFields(channelID, writeAPIKey);
if (statusCode == 200) {
Serial.println("ThingSpeak update successful.");
} else {
Serial.print("Problem updating channel. HTTP error code: ");
Serial.println(statusCode);
}
delay(15000); // ThingSpeak minimum update interval is 15 seconds
}