// 4 Digit 7-Segment Display (Common Cathode)
// Multiplexing Example - Counter from 0000 to 9999
int segPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a,b,c,d,e,f,g
int digitPins[4] = {9, 10, 11, 12}; // Digit1, Digit2, Digit3, Digit4
// Segment map for numbers 0–9
byte numbers[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
void setup() {
for (int i=0; i<7; i++) pinMode(segPins[i], OUTPUT);
for (int i=0; i<4; i++) pinMode(digitPins[i], OUTPUT);
}
void showDigit(int num, int digit) {
// Set segment pins
for (int i=0; i<7; i++) {
digitalWrite(segPins[i], numbers[num][i]);
}
// Enable one digit at a time (active LOW for common cathode with transistor)
digitalWrite(digitPins[digit], LOW);
delay(3); // digit ON time
digitalWrite(digitPins[digit], HIGH); // turn OFF digit
}
void loop() {
static int counter = 0;
// Repeat multiplexing enough times for stability
for (int t=0; t<100; t++) {
showDigit((counter/1000)%10, 0); // Thousands
showDigit((counter/100)%10, 1); // Hundreds
showDigit((counter/10)%10, 2); // Tens
showDigit(counter%10, 3); // Ones
}
counter++;
if (counter > 9999) counter = 0; // reset after 9999
}