const int segments[] = {2, 3, 4, 5, 6, 7, 8}; // A to G
const int buttonPin = 9;
int counter = 0;
bool prevButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long holdInterval = 500;
unsigned long lastHoldTime = 0;
const byte hexDigits[16] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
0b01110111, // A
0b01111100, // b
0b00111001, // C
0b01011110, // d
0b01111001, // E
0b01110001 // F
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
digitalWrite(segments[i], LOW); // Ortak katot için
}
pinMode(buttonPin, INPUT);
}
void displayDigit(byte val) {
byte bits = hexDigits[val % 16];
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], bitRead(bits, i));
}
}
void loop() {
bool buttonState = digitalRead(buttonPin);
unsigned long currentTime = millis();
// Düğmeye yeni basıldıysa
if (buttonState == HIGH && prevButtonState == LOW && (currentTime - lastDebounceTime) > debounceDelay) {
counter = (counter + 1) % 16;
displayDigit(counter);
lastDebounceTime = currentTime;
lastHoldTime = currentTime;
}
// Düğme basılı tutuluyorsa
if (buttonState == HIGH && (currentTime - lastHoldTime) > holdInterval) {
counter = (counter + 1) % 16;
displayDigit(counter);
lastHoldTime = currentTime;
}
prevButtonState = buttonState;
}