#define inputPin A3
int val = 0;
const byte segmentCodes[] = {
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000 // 9
};
unsigned long startTime = 0;
boolean isCounting = false;
void setup() {
DDRB = 0b001111;
DDRD = 0xFF;
DDRC = 0;
for (int i = 0; i < 4; i++) {
PORTB |= (1 << i);
}
}
void displayDigit(int digit) {
PORTD = segmentCodes[digit];
}
void displayTime(unsigned long time) {
int thousands = time / 10000;
int hundreds = (time / 1000) % 10;
int tens = (time / 100) % 10;
int ones = time % 10;
displayDigit(thousands);
PORTB |= 0b000001;
delay(5);
PORTB ^= 0b000001;
displayDigit(hundreds);
PORTB |= 0b000010;
delay(5);
PORTB ^= 0b000010;
displayDigit(tens);
PORTB |= 0b000100;
delay(5);
PORTB ^= 0b000100;
displayDigit(ones);
PORTB |= 0b001000;
delay(5);
PORTB ^= 0b001000;
}
void FX() {
if (startTime == 0) {
startTime = millis(); // เริ่มต้นนับเวลา
}
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
displayTime(elapsedTime);
if (elapsedTime > 99999) {
while (true) {
displayTime(99999);
}
}
}
void loop() {
val = digitalRead(inputPin);
if (val == 0 && !isCounting) {
isCounting = true;
FX();
} else if (val == 0 && isCounting) {
isCounting = false;
}
}