#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int ME3_PIN = 34;
const int MQ3_PIN = 35;
const int BUTTON_PIN = 18;
const int LED_GREEN = 25;
const int LED_YELLOW = 26;
const int LED_RED = 27;
bool systemActive = false;
void setup() {
Serial.begin(115200);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.display();
}
void loop() {
// Đọc công tắc
if (digitalRead(BUTTON_PIN)) {
systemActive = !systemActive;
delay(300); // Chống nhiễu
}
if (systemActive) {
float ethylene = analogRead(ME3_PIN) * (3.3 / 4095.0);
float alcohol = analogRead(MQ3_PIN) * (3.3 / 4095.0);
// Điều khiển LED
digitalWrite(LED_GREEN, (ethylene < 1.0 && alcohol < 0.5) ? HIGH : LOW);
digitalWrite(LED_YELLOW, (ethylene >= 1.0 && alcohol < 1.0) ? HIGH : LOW);
digitalWrite(LED_RED, (alcohol >= 1.0) ? HIGH : LOW);
// Hiển thị OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Ethylene: ");
display.println(ethylene, 2);
display.print("Alcohol: ");
display.println(alcohol, 2);
display.print("Status: ");
if (digitalRead(LED_GREEN)) display.println("UNRIPE");
else if (digitalRead(LED_YELLOW)) display.println("RIPE");
else display.println("OVERRIPE");
display.display();
} else {
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_RED, LOW);
display.clearDisplay();
display.setCursor(30, 28);
display.print("SYSTEM OFF");
display.display();
}
delay(500);
}