I would like to know how you would make a "function" for the DISPLAY_TIME so the two blocks of code can be reduced.
I am wort of working on it, but it is early days.
It's pretty easy, really. First, you identify the nearly identical code.
digitalWrite(D1_Select,HIGH);
if (digit == 0)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 1)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 2)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 3)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 4)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 5)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 6)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 7)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 8)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
if (digit == 9)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
}
digitalWrite(D1_Select,LOW);
and
if (gt == 1)
{
digitalWrite(D2_Select,HIGH);
if (digit == 0)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 1)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 2)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 3)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 4)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 5)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 6)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 7)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 8)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
if (digit == 9)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
}
digitalWrite(D2_Select,LOW);
Look nearly identical.
The second step is to identify the minor differences and the common code
if (gt == 0)
{
digitalWrite(D1_Select,HIGH);
// Do a bunch of stuff
}
digitalWrite(D1_Select,LOW);
vs.
if (gt == 1)
{
digitalWrite(D2_Select,HIGH);
// Do a bunch of stuff
}
digitalWrite(D2_Select,LOW);
The differences are which display the value is going to and which pin to set high to make the digit go there.
The common code actually makes the digit appear by turning on or off the correct pins.
So, create a function to contain the common code, that takes an argument - the digit to display.
void showDigit(byte digit)
{
if (digit == 0)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 1)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 2)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 3)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,LOW);
digitalWrite(Di4,LOW);
}
if (digit == 4)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 5)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 6)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 7)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,HIGH);
digitalWrite(Di3,HIGH);
digitalWrite(Di4,LOW);
}
if (digit == 8)
{
digitalWrite(Di1,LOW);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
if (digit == 9)
{
digitalWrite(Di1,HIGH);
digitalWrite(Di2,LOW);
digitalWrite(Di3,LOW);
digitalWrite(Di4,HIGH);
}
}
Then, call that function:
int display_number(int digit,int gt)
{
if (gt == 0)
{
digitalWrite(D1_Select,HIGH);
showDigit(digit);
}
digitalWrite(D1_Select,LOW);
if (gt == 1)
{
digitalWrite(D2_Select,HIGH);
showDigit(digit);
}
digitalWrite(D2_Select,LOW);
}