#include <SevSeg.h>
SevSeg sevseg1; // Display 1
SevSeg sevseg2; // Display 2
// Button Pins
const int button1Pin = A5; // Button for Display 1
const int button2Pin = 13; // Button for Display 2
// 7-Segment Segment Control Pins
const byte segmentPins1[] = {4, 5, 7, 8, 9, 3, 2, 6}; // Segment control pins for Display 1 (A, B, C, D, E, F, G, DP)
const byte segmentPins2[] = {12, A0, A2, A3, A4, 11, 10, A1}; // Segment control pins for Display 2
// Scores
int score1 = 0;
int score2 = 0;
// Button States
bool button1State = HIGH; // Used to store current value
bool button2State = HIGH;
bool lastButton1State = HIGH;
bool lastButton2State = HIGH;
// Button Debounce Timers
unsigned long lastButton1DebounceTime = 0;
unsigned long lastButton2DebounceTime = 0;
const unsigned long debounceDelay = 50; // Debounce delay (50 ms)
void setup() {
// Configure Display 1
sevseg1.begin(COMMON_CATHODE, 1, {}, segmentPins1, true); // No digitPins, direct segment control
sevseg1.setBrightness(100);
// Configure Display 2
sevseg2.begin(COMMON_CATHODE, 1, {}, segmentPins2, true); // No digitPins, direct segment control
sevseg2.setBrightness(100);
// Configure Buttons
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
// Initialize displays
sevseg1.setNumber(score1);
sevseg2.setNumber(score2);
}
void loop() {
// Get current time
unsigned long currentTime = millis();
// Read button states
int currentButton1State = digitalRead(button1Pin);
int currentButton2State = digitalRead(button2Pin);
// Debounce Button 1
if (currentButton1State != lastButton1State) {
lastButton1DebounceTime = currentTime; // Reset debounce timer
}
// If the button has been pressed for more than 50ms
if ((currentTime - lastButton1DebounceTime) > debounceDelay) {
if (currentButton1State == LOW && button1State == HIGH) { // Button press event
score1++;
if (score1 >= 10) score1 = 0; // Reset at 10
sevseg1.setNumber(score1); // Update Display 1
}
button1State = currentButton1State; // Update stable state
}
// Debounce Button 2
if (currentButton2State != lastButton2State) {
lastButton2DebounceTime = currentTime; // Reset debounce timer
}
// If the button has been pressed for more than 50ms
if ((currentTime - lastButton2DebounceTime) > debounceDelay) {
if (currentButton2State == LOW && button2State == HIGH) { // Button press event
score2++;
if (score2 >= 10) score2 = 0; // Reset at 10
sevseg2.setNumber(score2); // Update Display 2
}
button2State = currentButton2State; // Update stable state
}
// Store last raw button states
lastButton1State = currentButton1State;
lastButton2State = currentButton2State;
// Refresh displays
sevseg1.refreshDisplay();
sevseg2.refreshDisplay();
}
Resistors: 1KΩ
Common cathode displays