const uint8_t segPins[8] = {22,23,24,25,26,27,28,29};
const uint8_t digitPins[6] = {30,31,32,33,34,35};
// COMMON ANODE segment patterns (0 = segment ON, 1 = segment OFF)
uint8_t segCode[10] = {
0b0000001, //0
0b1001111, //1
0b0010010, //2
0b0000110, //3
0b1001100, //4
0b0100100, //5
0b0100000, //6
0b0001111, //7
0b0000000, //8
0b0000100 //9
};
void displayDigit(uint8_t digitValue, uint8_t position)
{
// Disable all digits (common anode → HIGH = OFF)
for (uint8_t i = 0; i < 6; i++)
digitalWrite(digitPins[i], HIGH);
uint8_t code = segCode[digitValue];
// Write segment states
for (uint8_t s = 0; s < 8; s++)
digitalWrite(segPins[s], (code & (1 << s)) ? HIGH : LOW);
// Enable selected digit (common anode → LOW = ON)
digitalWrite(digitPins[position], LOW);
delay(2);
}
void setup()
{
for (uint8_t i = 0; i < 8; i++)
pinMode(segPins[i], OUTPUT);
for (uint8_t i = 0; i < 6; i++)
pinMode(digitPins[i], OUTPUT);
}
void loop()
{
static uint32_t number = 100000; // start from 100000
uint8_t d[6];
uint32_t n = number;
// Split digits (from right)
for (int i = 5; i >= 0; i--) {
d[i] = n % 10;
n /= 10;
}
// multiplex all 6 digits
for (uint8_t i = 0; i < 6; i++)
displayDigit(d[i], i);
// Increase number after full cycle
number++;
if (number > 999999)
number = 100000;
}