// Define segment pins
const int segmentPins[8] = {2, 3, 4, 5, 6, 7, 8, 9}; // a, b, c, d, e, f, g, dp
// Define digit control pins
const int digitPins[4] = {10, 11, 12, 13}; // DIG1, DIG2, DIG3, DIG4
// Digit patterns for 0-9
const byte digitPatterns[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
void setup() {
// Initialize segment pins as outputs
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], HIGH); // Turn off all segments (common anode)
}
// Initialize digit control pins as outputs
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], LOW); // Turn off all digits (common anode)
}
}
void loop() {
int number = 2222; // The number to display
for (int i = 0; i < 4; i++) {
displayDigit(number % 10, i);
number /= 10;
}
}
void displayDigit(int digit, int position) {
// Turn on the corresponding digit
digitalWrite(digitPins[position], HIGH);
// Set the segments for the digit
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], (digitPatterns[digit] >> i) & 0x01 ? LOW : HIGH);
}
// Delay for multiplexing
delay(2);
// Turn off the digit
digitalWrite(digitPins[position], LOW);
}