#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED width, in pixels
#define SCREEN_HEIGHT 64 // OLED height, in pixels
// create an OLED display object connected to I2C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
unsigned long startTime;
unsigned long countdownSeconds = 0.5 * 24 * 60 * 60; // ใส่จำนวนวัน
String selectedVegetable = ""; // ใส่ชื่อผักที่เลือก
void setup() {
Serial.begin(115200);
Wire.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
startTime = millis();
}
void loop() {
// ตรวจสอบว่ามีข้อมูลใหม่จาก Serial หรือไม่ (จำลองการรับข้อมูลจากแอพฯ)
if (Serial.available()) {
selectedVegetable = Serial.readStringUntil('\n');
selectedVegetable.trim();
Serial.println("Received: " + selectedVegetable);
startTime = millis(); // รีเซ็ตเวลาเริ่มต้นเมื่อได้รับชื่อผักใหม่
}
unsigned long currentTime = millis();
unsigned long elapsedSeconds = (currentTime - startTime) / 1000;
if (elapsedSeconds < countdownSeconds) {
unsigned long remainingSeconds = countdownSeconds - elapsedSeconds;
unsigned long days = remainingSeconds / 86400;
unsigned long hours = (remainingSeconds % 86400) / 3600;
unsigned long minutes = (remainingSeconds % 3600) / 60;
unsigned long seconds = remainingSeconds % 60;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
if (selectedVegetable != "") {
display.println(selectedVegetable);
} else {
display.println("Waiting for selection");
}
display.setTextSize(2);
display.setCursor(0, 16);
char timeStr[20];
sprintf(timeStr, "%02ld : %02ld : %02ld : %02ld", days, hours, minutes, seconds);
display.println(timeStr);
display.display();
Serial.print("Time left: ");
Serial.println(timeStr);
} else {
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 24);
display.println("Time's up!");
display.display();
Serial.println("Time's up!");
}
delay(1000);
}