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 select1s() {
digitalWrite( A0, HIGH );
digitalWrite( A1, LOW );
}
void select10s() {
digitalWrite( A0, LOW );
digitalWrite( A1, HIGH );
}
void loop() {
int dwell = 100; // max 100ms avoids flicker on wokwi
blank();
select10s(); // apply ground to unit 0
draw2();
delay( dwell );
blank();
select1s(); // apply ground to unit 1
draw3();
delay( dwell );
}
// illuminate each segment in turn
void test() {
long seconds = 1000 * 1; // seconds
digitalWrite( A0, LOW );
digitalWrite( A1, LOW );
pin = MIDDLE;
digitalWrite( pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
digitalWrite( ++pin, HIGH ); delay( seconds );
}
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 );
}
void draw0() {
blank();
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
}
void draw1() {
blank();
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
}
void draw2() {
blank();
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
}
void draw3() {
blank();
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( BOTTOM, HIGH );
}
void draw4() {
blank();
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
}
void draw5() {
blank();
digitalWrite( TOP, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( MIDDLE, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( BOTTOM, HIGH );
}
void draw6() {
blank();
digitalWrite( TOP, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( BOTTOM_LEFT, HIGH );
digitalWrite( BOTTOM, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( MIDDLE, HIGH );
}
void draw7() {
blank();
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
}
void draw8() {
blank();
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 );
}
void draw9() {
blank();
digitalWrite( MIDDLE, HIGH );
digitalWrite( TOP_LEFT, HIGH );
digitalWrite( TOP, HIGH );
digitalWrite( TOP_RIGHT, HIGH );
digitalWrite( BOTTOM_RIGHT, HIGH );
digitalWrite( BOTTOM, HIGH ); // curly
}