#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int potPin = A2;
const int buttonPin = 10;
int buttonState = 0;
int mode = 0;
int lastMode = -1;
const unsigned long timeinsecond = 6000; // ✅ 5 วินาที = 5000 มิลลิวินาที
unsigned long startTime = 0;
bool blinkState = false;
unsigned long lastBlinkTime = 0;
void setup() {
lcd.begin(16, 2);
pinMode(buttonPin, INPUT_PULLUP);
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Volt measure");
}
void loop() {
buttonState = digitalRead(buttonPin);
static bool lastButton = HIGH;
if (lastButton == HIGH && buttonState == LOW) {
mode++;
if (mode > 2) mode = 0;
delay(200);
}
lastButton = buttonState;
// ตรวจจับการเปลี่ยนโหมด
if (mode != lastMode) {
lcd.clear();
if (mode == 0) {
lcd.setCursor(3, 0);
lcd.print("Volt measure");
}
else if (mode == 1) {
startTime = millis(); // ✅ เริ่มจับเวลาตอนเข้าโหมด 1
lcd.setCursor(0, 0);
lcd.print("time in second");
}
else if (mode == 2) {
lcd.setCursor(0, 0);
lcd.print("Press Button");
}
lastMode = mode;
}
// โหมด 0: วัดแรงดัน
if (mode == 0) {
int sensorValue = analogRead(potPin);
float voltage = sensorValue * (5.0 / 1023.0);
lcd.setCursor(0, 1);
lcd.print("Volt: ");
lcd.print(voltage, 2);
lcd.print(" V ");
}
// โหมด 1: ✅ นับถอยหลัง
else if (mode == 1) {
unsigned long currentTime = millis();
long timeLeft = timeinsecond - (currentTime - startTime); // เหลือเวลาเท่าไหร่
lcd.setCursor(0, 1);
if (timeLeft > 0) {
lcd.print("Time: ");
lcd.print(timeLeft / 1000); // แสดงเป็นวินาที
lcd.print(" s ");
} else {
lcd.print("Time's up! ");
}
}
// โหมด 2: blink
else if (mode == 2) {
unsigned long currentMillis = millis();
if (currentMillis - lastBlinkTime >= 500) {
lastBlinkTime = currentMillis;
blinkState = !blinkState;
lcd.setCursor(0, 1);
lcd.setCursor(0, 0);
lcd.print(" Press Button");
for (int i = 0; i < 16; i++) {
lcd.setCursor(i, 1);
lcd.print(">>blink<<");
delay(100);
lcd.setCursor(i, 1);
lcd.print(" blink ");
}
}
}
}