const int dataPin = 11;
const int clockPin = 9;
const int latchPin = 12;
const int buttonUp = 2;
const int buttonDown = 3;
const int buzzer = 4;
int counter = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
int lastButtonUpState = HIGH;
int lastButtonDownState = HIGH;
byte digits[10] = {
B00111111,
B00000110,
B01011011,
B01001111,
B01100110,
B01101101,
B01111101,
B00000111,
B01111111,
B01101111
};
void beep() {
tone(buzzer, 1000, 100);
}
void displayNumber(int number) {
if (number < 0) number = 0;
if (number > 9) number = 9;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digits[number]);
digitalWrite(latchPin, HIGH);
}
void checkButtons() {
int currentButtonUpState = digitalRead(buttonUp);
int currentButtonDownState = digitalRead(buttonDown);
if (currentButtonUpState == LOW && lastButtonUpState == HIGH) {
if (millis() - lastDebounceTime > debounceDelay) {
if (counter < 9) {
counter++;
} else {
beep();
}
lastDebounceTime = millis();
}
}
if (currentButtonDownState == LOW && lastButtonDownState == HIGH) {
if (millis() - lastDebounceTime > debounceDelay) {
if (counter > 0) {
counter--;
} else {
beep();
}
lastDebounceTime = millis();
}
}
lastButtonUpState = currentButtonUpState;
lastButtonDownState = currentButtonDownState;
}
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
displayNumber(0);
}
void loop() {
checkButtons();
displayNumber(counter);
delay(10);
}