// Pin assignments for the segments (A to G + optional DP)
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // DP on Pin 9 (optional)
const int digitPins[] = {10, 11, 12}; // Common pins for each digit
// Number patterns for the segments (bit pattern for 0-9)
const byte numberPatterns[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
// Declare the setNumber function prototype
void setNumber(int number);
void setup() {
// Set segment pins as outputs
for (int i = 0; i < 8; i++) { // Including DP on Pin 9
pinMode(segmentPins[i], OUTPUT);
}
// Set digit pins as outputs
for (int i = 0; i < 3; i++) {
pinMode(digitPins[i], OUTPUT);
}
}
void loop() {
// Display numbers from 1 to 9
for (int number = 1; number <= 9; number++) {
// Calculate the current digit index
int digitIndex = (number - 1) % 3; // 0, 1, or 2 for the three digits
// Turn on the corresponding digit
digitalWrite(digitPins[digitIndex], HIGH);
// Set the segments for the current number
setNumber(number); // Display the current number (1 to 9)
// Delay to allow the digit to show
delay(1000);
// Turn off the digit before moving to the next one
digitalWrite(digitPins[digitIndex], LOW);
}
}
// Set the segments for the given number
void setNumber(int number) {
byte pattern = numberPatterns[number];
for (int i = 0; i < 7; i++) {
if (pattern & (1 << i)) {
digitalWrite(segmentPins[i], LOW); // Turn ON for common anode
} else {
digitalWrite(segmentPins[i], HIGH); // Turn OFF for common anode
}
}
// Control DP (set LOW to turn on for common anode, HIGH for common cathode)
digitalWrite(segmentPins[7], HIGH); // Keep DP off (adjust if you want it on)
}