// Durian Classification System Simulation (Wokwi)
// Using simulated sensors and KNN-style rule-based classification
// Display results on Serial Monitor and count up to 1000 fruits
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD 16x2 I2C
// Simulated analog input pins for sensors
const int VOC_PIN = 34;
const int ETHANOL_PIN = 35;
const int C2H4_PIN = 32;
const int H2S_PIN = 33;
int count_unripe = 0;
int count_almost_ripe = 0;
int count_ripe = 0;
int count_overripe = 0;
int count_rotten = 0;
int total_fruits = 0;
String classifyFruit(int voc, int ethanol, int c2h4, int h2s) {
// Fake logic for simulation (rule-based)
if (voc < 500 && c2h4 < 500 && h2s < 300) return "Unripe";
if (voc < 700 && c2h4 < 700 && h2s < 400) return "Almost Ripe";
if (voc >= 700 && c2h4 >= 700 && h2s < 500) return "Ripe";
if (voc >= 800 && c2h4 >= 800 && h2s >= 500 && ethanol < 800) return "Overripe";
if (h2s >= 800 || ethanol >= 800) return "Rotten";
return "Unknown";
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Durian Classify");
delay(2000);
lcd.clear();
}
void loop() {
if (total_fruits >= 1000) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Done: 1000!");
delay(5000);
// Show result to Serial Monitor
Serial.println("=== Classification Result ===");
Serial.printf("Unripe: %d\n", count_unripe);
Serial.printf("Almost Ripe: %d\n", count_almost_ripe);
Serial.printf("Ripe: %d\n", count_ripe);
Serial.printf("Overripe: %d\n", count_overripe);
Serial.printf("Rotten: %d\n", count_rotten);
while (true);
}
int voc = analogRead(VOC_PIN);
int ethanol = analogRead(ETHANOL_PIN);
int c2h4 = analogRead(C2H4_PIN);
int h2s = analogRead(H2S_PIN);
String result = classifyFruit(voc, ethanol, c2h4, h2s);
if (result == "Unripe") count_unripe++;
else if (result == "Almost Ripe") count_almost_ripe++;
else if (result == "Ripe") count_ripe++;
else if (result == "Overripe") count_overripe++;
else if (result == "Rotten") count_rotten++;
total_fruits++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fruit #" + String(total_fruits));
lcd.setCursor(0, 1);
lcd.print(result);
Serial.printf("Fruit %d: %s\n", total_fruits, result.c_str());
delay(1000); // Simulate delay between fruit passing
}