Hello,
I'm using a 4 digit 7 segment display for a countdown timer to display minutes and seconds.
The program is running as intended, and the hardware is pretty much working as intended except that the first 3 digits are very dim and only the 4th digit is bright. Other than being very dim, the digits are displaying correctly. I'm using a 4-digit 7 segment common cathode display.
I've hooked up pins a~g with a 150 ohm resistor to pins 2~8 on the arduino.
I'm using a 2222a NPN transistors for each of the digits.
- Emitters connect to GND
- Bases connect to pins 10~13 on the arduino with a 1k resistor
- Collector connects to their respective digit pins on the display
I've switched around the pins in all sorts of combinations and played around with the code to make sure it's not a hardware defect, and I can get all the digits to shine brightly (without running the timer correctly). I'm thinking it must be my code and/or a lack of some part.
The idea is to pick a digit by switching it to HIGH and switching the other 3 to LOW, display the number, the repeat.
Any help would be greatly appreciated.
/*
*/
long int time = 1565000;
int startTime;
int minute1;
int minute2;
int second1;
int second2;
int elapsedTime;
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int d1 = 10;
int d2 = 11;
int d3 = 12;
int d4 = 13;
void setup() {
Serial.begin(9600);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
}
void loop() {
startTime = millis();
do{
elapsedTime = millis() - startTime;
time = time - elapsedTime;
minute1 = ((time/1000)/60)/10;
minute2 = ((time/1000)/60)%10;
second1 = ((time/1000)%60)/10;
second2 = ((time/1000)%60)%10;
clearLEDs();
pickDigit(1);
pickNumber(minute1);
delayMicroseconds(55);
clearLEDs();
pickDigit(2);
pickNumber(minute2);
// delay(10);
delayMicroseconds(55);
clearLEDs();
pickDigit(3);
pickNumber(second1);
// delay(10);
delayMicroseconds(55);
clearLEDs();
pickDigit(4);
pickNumber(second2);
//delay(10);
delayMicroseconds(55);
startTime = millis();
delay(20);
} while (time>0);
}
void pickDigit(int x) //changes digit
{
switch(x)
{
case 1:
digitalWrite(d1, HIGH);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
break;
case 2:
digitalWrite(d1, LOW);
digitalWrite(d2, HIGH);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
break;
case 3:
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, HIGH);
digitalWrite(d4, LOW);
break;
case 4:
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, HIGH);
break;
default:
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
}
}
void pickNumber(int x) //changes value of number
{
switch(x)
{
default:
zero();
break;
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;
}
}
void clearLEDs()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void zero()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void nine()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}