#define BLYNK_TEMPLATE_ID "TMPL3fOmsq3fT"
#define BLYNK_TEMPLATE_NAME "AI Powered Smart Washing Machine"
#define BLYNK_AUTH_TOKEN "2s9kdrlW_5g9QpyAXPMTxwn4tXAc99r7"
// Set true for Wokwi offline test (no Blynk needed)
// Set false for real Blynk cloud usage
#define SERIAL_FALLBACK true
#include <Arduino.h>
#if !SERIAL_FALLBACK
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#endif
// Potentiometers
int dirtPin = 32; // Dirt level (Pot1)
int fabricPin = 33; // Fabric type (Pot2)
// Blynk virtual pins
#define VP_FABRIC V0
#define VP_DIRT V1
#define VP_TIME V2
#define VP_WATER V3
// ------------------ CLASSIFIERS ------------------
String classifyFabric(int raw) {
if (raw < 1500) return "Cotton";
if (raw < 3000) return "Synthetic";
return "Wool";
}
String classifyDirt(int raw) {
if (raw < 1500) return "Low";
if (raw < 3000) return "Medium";
return "High";
}
int getBaseTime(String fabric) {
if (fabric == "Cotton") return 30;
if (fabric == "Synthetic") return 20;
return 15; // Wool
}
float getMultiplier(String dirt) {
if (dirt == "Low") return 1.0;
if (dirt == "Medium") return 1.5;
return 2.0; // High
}
// ------------------ SETUP ------------------
void setup() {
Serial.begin(115200);
#if !SERIAL_FALLBACK
Blynk.begin(BLYNK_AUTH_TOKEN, "Wokwi-GUEST", "");
#else
Serial.println("Running in SERIAL ONLY mode (Blynk disabled)");
#endif
pinMode(dirtPin, INPUT);
pinMode(fabricPin, INPUT);
}
// ------------------ LOOP ------------------
void loop() {
#if !SERIAL_FALLBACK
Blynk.run();
#endif
int dirtRaw = analogRead(dirtPin);
int fabricRaw = analogRead(fabricPin);
String fabric = classifyFabric(fabricRaw);
String dirt = classifyDirt(dirtRaw);
int baseTime = getBaseTime(fabric);
float multiplier = getMultiplier(dirt);
int washTime = baseTime * multiplier;
int water = washTime * 2; // Example: 2 liters per minute
#if !SERIAL_FALLBACK
Blynk.virtualWrite(VP_FABRIC, fabric);
Blynk.virtualWrite(VP_DIRT, dirt);
Blynk.virtualWrite(VP_TIME, washTime);
Blynk.virtualWrite(VP_WATER, water);
#else
Serial.print("Fabric: "); Serial.print(fabric);
Serial.print(" Dirt: "); Serial.print(dirt);
Serial.print(" Time: "); Serial.print(washTime); Serial.print(" min");
Serial.print(" Water: "); Serial.print(water); Serial.println(" L");
#endif
delay(1000);
}