const int segmentPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
const int digitPins[4] = {10, 11, 12, 13};
const int buttonPin = A0;
const byte digitPatterns[10][8] = {
{1,1,1,1,1,1,0,0},
{0,1,1,0,0,0,0,0},
{1,1,0,1,1,0,1,0},
{1,1,1,1,0,0,1,0},
{0,1,1,0,0,1,1,0},
{1,0,1,1,0,1,1,0},
{1,0,1,1,1,1,1,0},
{1,1,1,0,0,0,0,0},
{1,1,1,1,1,1,1,0},
{1,1,1,1,0,1,1,0}
};
int counter = 0;
int buttonState = LOW;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 30;
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH);
}
pinMode(buttonPin, INPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
counter++;
if (counter > 9999) counter = 0;
}
}
}
lastButtonState = reading;
static int currentDigit = 0;
static unsigned long lastDigitTime = 0;
if (millis() - lastDigitTime > 3) {
lastDigitTime = millis();
for (int j = 0; j < 4; j++) {
digitalWrite(digitPins[j], HIGH);
}
int digits[4] = {
counter / 1000,
(counter / 100) % 10,
(counter / 10) % 10,
counter % 10
};
for (int seg = 0; seg < 8; seg++) {
digitalWrite(segmentPins[seg], digitPatterns[digits[currentDigit]][seg]);
}
digitalWrite(digitPins[currentDigit], LOW);
currentDigit = (currentDigit + 1) % 4;
}
}