#define DIGITS_START 2
#define BASE_SEGMENT_PIN 6
#define A 6
#define B 7
#define C 8
#define D 9
#define E 10
#define F 11
#define G 12
#define SEGMENTS_CNT 7
void setup() {
for (int i = 0; i < 4; ++i)
pinMode(DIGITS_START + i, OUTPUT);
for (int i = 0; i < 7; ++i)
pinMode(BASE_SEGMENT_PIN + i, OUTPUT);
}
const char ZERO[] = {A, B, C, D, E, F, 0};
const char ONE[] = {B, C, 0};
const char TWO[] = {A, B, D, E, G, 0};
const char THREE[] = {A, B, C, D, G, 0};
const char FOUR[] = {B, C, F, G, 0};
const char FIVE[] = {A, C, D, F, G, 0};
const char SIX[] = {A, C, D, E, F, G, 0};
const char SEVEN[] = {A, B, C, 0};
const char EIGHT[] = {A, B, C, D, E, F, G, 0};
const char NINE[] = {A, B, C, D, F, G, 0};
const char* NUMBERS[10] = {
ZERO, ONE, TWO, THREE, FOUR,
FIVE, SIX, SEVEN, EIGHT, NINE,
};
const char ZERO_MAP[] = {1, 1, 1, 1, 1, 1, 0};
const char ONE_MAP[] = {0, 1, 1, 0, 0, 0, 0};
const char TWO_MAP[] = {1, 1, 0, 1, 1, 0, 1};
const char THREE_MAP[] = {1, 1, 1, 1, 0, 0, 1};
const char FOUR_MAP[] = {0, 1, 1, 0, 0, 1, 1};
const char FIVE_MAP[] = {1, 0, 1, 1, 0, 1, 1};
const char SIX_MAP[] = {1, 0, 1, 1, 1, 1, 1};
const char SEVEN_MAP[] = {1, 1, 1, 0, 0, 0, 0};
const char EIGHT_MAP[] = {1, 1, 1, 1, 1, 1, 1};
const char NINE_MAP[] = {1, 1, 1, 1, 0, 1, 1};
const char* NUMBERS_MAPS[10] = {
ZERO_MAP, ONE_MAP, TWO_MAP, THREE_MAP, FOUR_MAP,
FIVE_MAP, SIX_MAP, SEVEN_MAP, EIGHT_MAP, NINE_MAP,
};
void showNumber(int digitIndex, int number) {
for (int i = 0; EIGHT[i]; ++i)
digitalWrite(EIGHT[i], 0);
for (int i = 0; i < 4; ++i)
digitalWrite(DIGITS_START + i, i != digitIndex);
for (int i = 0; NUMBERS[number][i]; ++i)
digitalWrite(NUMBERS[number][i], 1);
}
int d = 0;
void loop() {
showNumber(d % 4, d % 4);
d++;
}