/*
#define LED_PIN 13
#define BUTTON_PIN A0
byte lastButtonState = LOW;
byte ledState = LOW;
unsigned long debounceDuration = 50; // millis
unsigned long lastTimeButtonStateChanged = 0;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
if (millis() - lastTimeButtonStateChanged > debounceDuration) {
byte buttonState = digitalRead(BUTTON_PIN);
if (buttonState != lastButtonState) {
lastTimeButtonStateChanged = millis();
lastButtonState = buttonState;
if (buttonState == LOW) {
ledState = (ledState == HIGH) ? LOW: HIGH;
digitalWrite(LED_PIN, ledState);
}
}
}
}
*/
/*
#define LED_PIN 13
#define BUTTON_PIN A0
byte lastButtonState = HIGH; // ปุ่มใช้ LOW เมื่อกด ถ้าใช้ Pull-up
byte ledState = LOW;
unsigned long debounceDuration = 50; // หน่วงการเด้งของปุ่ม (ms)
unsigned long lastTimeButtonStateChanged = 0;
unsigned long pressStartTime = 0;
bool buttonPressed = false;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // ใช้ Pull-up ภายใน
}
void loop() {
byte buttonState = digitalRead(BUTTON_PIN);
// เช็ค debounce
if (buttonState != lastButtonState) {
if (millis() - lastTimeButtonStateChanged > debounceDuration) {
lastTimeButtonStateChanged = millis();
lastButtonState = buttonState;
if (buttonState == LOW) {
// เริ่มจับเวลาตอนกดปุ่มลง
pressStartTime = millis();
buttonPressed = true;
} else if (buttonState == HIGH && buttonPressed) {
// ปล่อยปุ่มก่อน 3 วิ => toggle LED
if (millis() - pressStartTime < 3000) {
ledState = (ledState == HIGH) ? LOW : HIGH;
digitalWrite(LED_PIN, ledState);
}
buttonPressed = false;
}
}
}
// ตรวจสอบว่ากดปุ่มค้างไว้เกิน 3 วิหรือไม่
if (buttonPressed && (millis() - pressStartTime >= 3000)) {
ledState = LOW;
digitalWrite(LED_PIN, ledState);
buttonPressed = false; // ป้องกันไม่ให้ดับซ้ำ
}
}
*/
#define BUTTON_PIN A0
#define LED_PIN 9 // ขาที่ต่อกับหลอด LED
// ขา segment A-G ต่อกับขา 2 ถึง 8
const byte segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};
// รูปแบบ segment สำหรับเลข 0-9 (common cathode)
const byte digitPatterns[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
byte lastButtonState = HIGH;
unsigned long debounceDelay = 50;
unsigned long lastDebounceTime = 0;
bool buttonPressed = false;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // เริ่มต้น LED ดับ
}
void displayDigit(int digit) {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digitPatterns[digit][i]);
}
}
void clearDisplay() {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], LOW);
}
}
void loop() {
int reading = digitalRead(BUTTON_PIN);
// ตรวจสอบการ debounce
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// ถ้าเปลี่ยนจาก HIGH -> LOW (ปุ่มถูกกด)
if (reading == LOW && !buttonPressed) {
buttonPressed = true;
// เริ่มนับ 1 ถึง 9
for (int i = 1; i <= 9; i++) {
displayDigit(i);
if (i == 5) {
digitalWrite(LED_PIN, HIGH); // เปิด LED
}
if (i == 9) {
digitalWrite(LED_PIN, LOW); // ปิด LED
}
delay(1000);
}
clearDisplay();
}
// ปล่อยปุ่มแล้ว
if (reading == HIGH) {
buttonPressed = false;
}
}
lastButtonState = reading;
}