int pin = 5; // D7 D7 D7
const int MIDDLE = pin++; // D6 D8
const int TOP_LEFT = pin++; // D6 D8
const int TOP = pin++; // D6 D8
const int TOP_RIGHT = pin++; // D5 D5 D5
const int BOTTOM_LEFT = pin++; // D9 D11
const int BOTTOM = pin++; // D9 D11
const int BOTTOM_RIGHT = pin++; // D9 D11
const int DOT = pin++; // D10 D10 D10 D12
void setup() {
int pin = MIDDLE;
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
pinMode( pin++, OUTPUT );
// ground pins
pinMode( A0, OUTPUT ); // 10s digit
pinMode( A1, OUTPUT ); // 1s digit
}
void loop() {
int dwell = 100; // max 100ms avoids flicker on wokwi
select10s(); // apply ground to unit 0
draw2();
delay( dwell );
select1s(); // apply ground to unit 1
draw3();
delay( dwell );
}
// connect the ground circuit for only unit 1 - disabling unit 0
void select1s() {
blank();
digitalWrite( A0, HIGH ); // turn off unit 0
digitalWrite( A1, LOW ); // turn on unit 1
}
// connect the ground circuit for only unit 0 - disabling unit 1
void select10s() {
blank();
digitalWrite( A1, HIGH ); // turn off unit 1
digitalWrite( A0, LOW ); // turn on unit 0
}
// cut power to all eight segments of all displays
void blank() {
pin = MIDDLE;
digitalWrite( pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
digitalWrite( ++pin, LOW );
}
// draw a 0 figure in the active display(s)
void draw0() {
digitalWrite( MIDDLE, LOW );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a right-justified 1 figure in the active display(s)
void draw1() {
digitalWrite( MIDDLE, LOW );
digitalWrite( TOP_LEFT, LOW );
digitalWrite( TOP, LOW );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, LOW );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 2 figure in the active display(s)
void draw2() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, LOW );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, LOW );
digitalWrite( DOT, LOW );
}
// draw a 3 figure in the active display(s)
void draw3() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, LOW );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 4 figure in the active display(s)
void draw4() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, LOW );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, LOW );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 5 figure in the active display(s)
void draw5() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, LOW );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 6 figure in the active display(s)
void draw6() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, LOW );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 7 figure in the active display(s)
void draw7() {
digitalWrite( MIDDLE, LOW );
digitalWrite( TOP_LEFT, LOW );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, LOW );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw an 8 figure in the active display(s)
void draw8() {
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}
// draw a 9 figure in the active display(s)
void draw9() {
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_LEFT, LOW );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( DOT, LOW );
}