const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8}; // A-G segment pins
const int digitPins[] = {9,10,11,12}; // D1-D4 (digit control pins)
// Common Cathode: 1 = ON, 0 = OFF
const byte numbers[4][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
};
const byte letters[4][7] = {
{1, 1, 1, 0, 1, 1, 1}, // A
{0, 0, 1, 1, 1, 1, 1}, // b
{1, 0, 0, 1, 1, 1, 0}, // c
{0, 1, 1, 1, 1, 0, 1} // d
};
void setup() {
for (int i = 0; i < 7; i++) pinMode(segmentPins[i], OUTPUT); // Set A-G as outputs
for (int i = 0; i < 4; i++) pinMode(digitPins[i], OUTPUT); // Set digit control pins as outputs
}
void displayCharacter(int digit, const byte character[7]) {
for (int i = 0; i < 4; i++) digitalWrite(digitPins[i], HIGH); // Turn OFF all digits
for (int i = 0; i < 7; i++)
digitalWrite(segmentPins[i], character[i]); // Set segment states
digitalWrite(digitPins[digit], LOW); // Turn ON selected digit (Common Cathode: LOW = ON)
delayMicroseconds(3000); // Short delay for stable multiplexing (reduce flickering)
digitalWrite(digitPins[digit], HIGH); // Turn OFF digit again
}
void loop() {
// Display "0123"
for (int i = 0; i < 300; i++) { // Loop to stabilize the display for 1 second
displayCharacter(0, numbers[0]); // 0
displayCharacter(1, numbers[1]); // 1
displayCharacter(2, numbers[2]); // 2
displayCharacter(3, numbers[3]); // 3
}
delay(1000); //delay 1 second before switching to next set
// Display "Abcd"
for (int i = 0; i < 300; i++) { // Loop to stabilize the display for ~1 second
displayCharacter(0, letters[0]); // A
displayCharacter(1, letters[1]); // b
displayCharacter(2, letters[2]); // c
displayCharacter(3, letters[3]); // d
}
delay(1000); //delay 1 second before switching to next set
}