Hi,
if you haven't solved your problem yet, i made a code some days before in order to hook your arduino up to a 7 segment display with up to 3 digits!
At the head of the code, you're able to choose the type ( common anode or commen cathode) and the frequency!
// Triple Digit Display by Simon Schrampfer --------------------
int delaytime = 3; //the time a digit is shown
boolean common = 1; // common anodes --> 1; common cathodes --> 0
//----------------It's your turn here!---------------------
//---------------Don't change anything below---------------
boolean off;
const byte patterns[10][7] = {
{ 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,1,0,1,1 } // = 9
};
byte pattern1[7];
byte pattern2[7];
byte pattern3[7];
void setup()
{
pinMode(2, OUTPUT); //A
pinMode(3, OUTPUT); //B
pinMode(4, OUTPUT); //C
pinMode(5, OUTPUT); //D
pinMode(6, OUTPUT); //E
pinMode(7, OUTPUT); //F
pinMode(8, OUTPUT); //G
pinMode(9, OUTPUT); //DP
//common anodes or cathodes
pinMode(10, OUTPUT); //D1
pinMode(11, OUTPUT); //D2
pinMode(12, OUTPUT); //D3
if (common==1)
{
off = 0;
}
else
{
off = 1;
}
}
void loop()
{
for (int i=999;i>0;i--)
{
for (int t=0;t<20;t++)
{
printall(i);
}
}
}
void printall(int value)
{
givepattern1(givedig1(value));
givepattern2(givedig2(value));
givepattern3(givedig3(value));
switchcommon(1);
printpattern(pattern1);
turnoff();
switchcommon(2);
printpattern(pattern2);
turnoff();
switchcommon(3);
printpattern(pattern3);
turnoff();
}
int givedig1(int value)
{
if (value>999){return 9;}
byte val = value/100;
if (val >= 1)
{
return val;
}
else
{
return 0;
}
}
int givedig2(int value)
{
if (value>999){return 9;}
int oth = value/100;
int dif = value-oth100;
byte val = dif/10;
if (val >= 1)
{
return val;
}
else
{
return 0;
}
}
int givedig3(int value)
{
if (value>999){return 9;}
int oth = value/100;
int dif = value-oth100;
int nxt = dif/10;
byte val = dif-nxt*10;
return val;
}
void switchcommon(byte which)
{
if (which==1){
digitalWrite(10,common);
digitalWrite(11,off);
digitalWrite(12,off);}
if (which==2){
digitalWrite(10,off);
digitalWrite(11,common);
digitalWrite(12,off);}
if (which==3){
digitalWrite(10,off);
digitalWrite(11,off);
digitalWrite(12,common);}
}
void givepattern1(int digit1){
for (int g=0;g<10;g++){
pattern1[g]=patterns[digit1][g];
}
}
void givepattern2(int digit2){
for (int g=0;g<10;g++){
pattern2[g]=patterns[digit2][g];
}
}
void givepattern3(int digit3){
for (int g=0;g<10;g++){
pattern3[g]=patterns[digit3][g];
}
}
void printpattern(byte onepattern[7])
{
for (int i=2; i<9; i++)
{
int a = (i)-2;
boolean com;
if (common==1)
{
if (onepattern[a] == 1)
{
com = 0;
}
else
{
com = 1;
}
}
digitalWrite(i,com);
}
delay(delaytime);
}
void turnoff()
{
for (int b=2; b<9; b++)
{
digitalWrite(b,common);
}
delay(1);
}