Hello, I am playing with an Arduino Nano and a seven-segment display. The display has ten terminals, and by simple trial-and-error it appears two of them are a common ground and the remaining eight connect each to one of the illuminated segments.
I've figured out which voltage input goes to each segment, and created a simple test that draws ten digits in sequence. That works, but it uses nine pins of the Arduino.
What I am thinking now is, to add a second digit. Maybe to make a speedometer heads-up display in the future.
I have recently read about the digital input pullup resistor mode... and that's got me thinking: is there a way I could blast both displays with the same input, but conditionally choose one or the other by allowing the ground connection or not? A "conditional ground" mode of the arduino pin, that would allow some current to run into it to ground?
I am guessing I could do this with two transistors... but I do not have any transistor. I thought it would be cool to learn and use a built-in Arduino feature if it exists.
Video of the single digit working with my code
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 );
}
void loop() {
blank();
long seconds = 1000 * 1; // seconds
delay( seconds );
draw1();
delay( seconds );
draw2();
delay( seconds );
draw3();
delay( seconds );
draw4();
delay( seconds );
draw5();
delay( seconds );
draw6();
delay( seconds );
draw7();
delay( seconds );
draw8();
delay( seconds );
draw9();
delay( seconds );
draw0();
delay( seconds );
}
// illuminate each segment in turn
void test() {
long seconds = 1000 * 1; // seconds
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 );
}
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
}
