Hi, so I have a 5-digit 7-segment common anode display connected to my arduino mega. I have a 220 ohm resistor connected to each segment pin as a current-limiting resistor. I see other threads with people using transistors to control the digit pins. Is this required? I have some code set up for my 5-digit display (without using any library) and have gotten the numbers to light up (no decimal point yet), but I haven't used any transistors to control the digits, so I'm wondering if my method for driving the display is wrong. The display lights up nice and bright, but when I input a number like "18181" into the serial monitor, you can see dim outlines for the segments for number 8, overlapping in the places where the 1 is.
#define aPin 22 // A
#define bPin 23 // ________
#define cPin 24 // | |
#define dPin 25 // F | | B
#define ePin 26 // | |
#define fPin 27 // | ________ |
#define gPin 28 // G
#define DP 29 // | |
#define D1 8 // | |
#define D2 9 // E | | C
#define D3 10 // | ________ |
#define D4 11 // D
#define D5 12
unsigned long num;
unsigned long dig1 = 0;
unsigned long dig2 = 0;
unsigned long dig3 = 0;
unsigned long dig4 = 0;
unsigned long dig5 = 0;
unsigned long DTime = 2;
void setup()
{
pinMode(aPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(cPin, OUTPUT);
pinMode(dPin, OUTPUT);
pinMode(ePin, OUTPUT);
pinMode(fPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(DP,OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
Serial.begin(9600);
Serial.setTimeout(30);
}
void loop()
{
digitalWrite( D1, LOW);
digitalWrite( D2, LOW);
digitalWrite( D3, LOW);
digitalWrite( D4, LOW);
digitalWrite( D5, LOW);
if (Serial.available() > 0)
{
num = Serial.parseInt();
Serial.print("Displaying: "); Serial.println(num);
dig1 = num / 10000;
num = num - (dig1 * 10000);
dig2 = num / 1000;
num = num - (dig2 * 1000);
dig3 = num / 100;
num = num - (dig3 * 100);
dig4 = num / 10;
num = num - (dig4 * 10);
dig5 = num;
}
digitalWrite( D1, HIGH); //digit 1
pickNumber(dig1);
delay(DTime);
digitalWrite( D1, LOW);
digitalWrite( D2, HIGH); //digit 2
pickNumber(dig2);
delay(DTime);
digitalWrite( D2, LOW);
digitalWrite( D3, HIGH); //digit 3
pickNumber(dig3);
delay(DTime);
digitalWrite( D3, LOW);
digitalWrite( D4, HIGH); //digit 4
pickNumber(dig4);
delay(DTime);
digitalWrite( D4, LOW);
digitalWrite( D5, HIGH); //digit 5
pickNumber(dig5);
delay(DTime);
digitalWrite( D5, LOW);
}
void pickNumber(int x){
switch(x){
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
default: zero(); break;
}
}
void clearLEDs()
{
digitalWrite( 2, LOW); // A
digitalWrite( 3, LOW); // B
digitalWrite( 4, LOW); // C
digitalWrite( 5, LOW); // D
digitalWrite( 6, LOW); // E
digitalWrite( 7, LOW); // F
digitalWrite( 8, LOW); // G
}
void one() //B, C set
{
digitalWrite( aPin, HIGH);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, HIGH);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, HIGH);
digitalWrite( gPin, HIGH);
}
void two() //A, B, D, E, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, HIGH);
digitalWrite( dPin, LOW);
digitalWrite( ePin, LOW);
digitalWrite( fPin, HIGH);
digitalWrite( gPin, LOW);
}
void three() //A, B, C, D, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, HIGH);
digitalWrite( gPin, LOW);
}
void four() //B, C, F, G set
{
digitalWrite( aPin, HIGH);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, HIGH);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, LOW);
digitalWrite( gPin, LOW);
}
void five() //A, C, D, F, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, HIGH);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, LOW);
digitalWrite( gPin, LOW);
}
void six() //A, C, D, E, F, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, HIGH);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, LOW);
digitalWrite( fPin, LOW);
digitalWrite( gPin, LOW);
}
void seven() //A, B, C set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, HIGH);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, HIGH);
digitalWrite( gPin, HIGH);
}
void eight() //A, B, C, D, E, F, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, LOW);
digitalWrite( fPin, LOW);
digitalWrite( gPin, LOW);
}
void nine() //A, B, C, D, F, G set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, HIGH);
digitalWrite( fPin, LOW);
digitalWrite( gPin, LOW);
}
void zero() //A, B, C, D, E, F set
{
digitalWrite( aPin, LOW);
digitalWrite( bPin, LOW);
digitalWrite( cPin, LOW);
digitalWrite( dPin, LOW);
digitalWrite( ePin, LOW);
digitalWrite( fPin, LOW);
digitalWrite( gPin, HIGH);
}
