#include <WiFi.h>
#include <HTTPClient.h>
// Define pin connections
const int ENA = 1; // Enable pin for motor driver 1
const int IN1 = 2; // Input 1 for motor driver 1
const int IN2 = 3; // Input 2 for motor driver 1
const int triggerPin1 = 5; // Trigger pin for sensor 1
const int echoPin1 = 6; // Echo pin for sensor 1
const int triggerPin2 = 7; // Trigger pin for sensor 2
const int echoPin2 = 8; // Echo pin for sensor 2
// Variables
long duration1, distance1; // Variables to store ultrasonic sensor 1 data
long duration2, distance2; // Variables to store ultrasonic sensor 2 data
HTTPClient http;
WiFiClient client;
const char *ssid = "Wokwi-GUEST"; // Your WiFi SSID
const char *password = ""; // Your WiFi password
void UpdateIPAddress(String MACAddress, String ipAddress)
{
const String url = "https://serena-backend-2g6tjw7nja-et.a.run.app/devices/serenbox";
Serial.print("Updating SerenBox IP Address...");
Serial.println();
Serial.print("MAC: " + MACAddress);
Serial.println();
Serial.print("IP: " + ipAddress);
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
String json_1 = "{\r\n \"credentials\": \"";
String json_2 = MACAddress + "\",\r\n \"ip_address\": \"";
String json_3 = ipAddress;
String json_4 = "\"\r\n}";
String httpRequestData = json_1 + json_2 + json_3 + json_4;
int httpResponseCode = http.PATCH(httpRequestData);
if (httpResponseCode > 0)
{
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println();
Serial.println(payload);
}
else
{
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
http.end();
}
void setup()
{
// Motor pins setup
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
// Ultrasonic sensor pins setup
pinMode(triggerPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(triggerPin2, OUTPUT);
pinMode(echoPin2, INPUT);
Serial.begin(9600);
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Call the function to update IP Address after connecting to WiFi
UpdateIPAddress(WiFi.macAddress(), WiFi.localIP().toString());
}
void loop()
{
// Read data from ultrasonic sensor 1
digitalWrite(triggerPin1, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin1, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1 * 0.0343) / 2;
// Read data from ultrasonic sensor 2
digitalWrite(triggerPin2, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin2, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2 * 0.0343) / 2;
// Motor control based on sensor data
if (distance1 < 20 && distance2 < 20)
{
// Move motor forward
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255); // Adjust PWM value for motor speed
}
else
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
}
Serial.print("Sensor 1: ");
Serial.print(distance1);
Serial.print(" cm Sensor 2: ");
Serial.print(distance2);
Serial.println(" cm");
delay(500);
}