// 7-segment display, harvested from old darts board, "reverse engineered".
// Common-anode type => LOW (or 0) lights up the LED.
// So to clear it up, set all segments to HIGH (or 1).
// 4 digits (well, 3 digits + some :)
// Look from above, decimal points are on top!

//        a  dp b  
//   _____|__|__|__|__|__|_____
//  |                          |
//  |                          |
//  |_____ __ __ __ __ __ _____|
//        |  |  |  |  |  |

//   
// Define pins
// a - g: individual segment
// dp: "decimal point"
// dx: select digit pin
int a = 8; 
int b = 7; 
int c = 6; 
int d = 5; 
int e = 4; 
int f = 3; 
int g = 2;
int dp = 1;
int d1 = 9;
int d2 = 10;
int d3 = 11;
int d4 = 12;

int seg[] {a, b, c, d, e, f, g, dp}; // segment pins

byte chars[12][9] { 
           {'0',0,0,0,0,0,0,1,1},//0
           {'1',1,0,0,1,1,1,1,1},//1
           {'2',0,0,1,0,0,1,0,1},//2
           {'3',0,0,0,0,1,1,0,1},//3
           {'4',1,0,0,1,1,0,0,1},//4
           {'5',0,1,0,0,1,0,0,1},//5
           {'6',0,1,0,0,0,0,0,1},//6
           {'7',0,0,0,1,1,1,1,1},//7
           {'8',0,0,0,0,0,0,0,1},//8
           {'9',0,0,0,0,1,0,0,1},//9
           {'h',1,1,0,1,0,0,0,1},//h
           {'t',1,1,1,0,0,0,0,1},//t
};
           
void setup()
{
  pinMode(a, OUTPUT); 
  pinMode(b, OUTPUT); 
  pinMode(c ,OUTPUT);
  pinMode(d ,OUTPUT);
  pinMode(e ,OUTPUT);
  pinMode(f ,OUTPUT);
  pinMode(g ,OUTPUT);
  pinMode(dp, OUTPUT);
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
}

void clearDisplay()
{
  // currently only deal with the fisrt (right most) digit
  digitalWrite(d1, 1);
  digitalWrite(d2, 1);
  // clear display (turn off all LEDs)
  for (int i=0; i<sizeof(seg); i++)
  {
    digitalWrite(seg[i], 1);
  }
}

void oneDigit()
{
  //clearDisplay(); // reset the display (clear it up)
  digitalWrite(d1, 1); // select first digit
  // print all characters from chars array with 1 second pause
  for (int i=0; i<12; i++) // i=0 .. 12
  {
    for (int j=0; j<8; j++) //j=0..7
    {
      digitalWrite(seg[j], chars[i][j+1]);
    };
    delay(500); // wait for 1 second
  };
}

void twoDigits()
{
  //clearDisplay(); // reset the display (clear it up)
  digitalWrite(d1, 1); // select first digit
  // print all characters from chars array with 1 second pause
  for (int i=0; i<12; i++) // i=0 .. 12
  {
    for (int j=0; j<8; j++) //j=0..7
    {
      digitalWrite(seg[j], chars[i][j+1]);
    };
    delay(500); // wait for 1 second
  };
  digitalWrite(d2, 1); // select first digit
  // print all characters from chars array with 1 second pause
  for (int i=0; i<12; i++) // i=0 .. 12
  {
    for (int j=0; j<8; j++) //j=0..7
    {
      digitalWrite(seg[j], chars[i][j+1]);
    };
    delay(500); // wait for 1 second
}
}

void loop()
{
//oneDigit();
twoDigits();



  
// =========== OLD CODE BELOW ===========
//  digitalWrite(a, 0);
//  digitalWrite(b, 0);
//  //...
//  digitalWrite(dp, 1);

//  digitalWrite(pina, LOW); 
//  digitalWrite(pinb, LOW);
//  digitalWrite(pinc, LOW);
//  digitalWrite(pind, LOW);
//  digitalWrite(pine, LOW);
//  digitalWrite(pinf, LOW);
//  digitalWrite(ping, HIGH);
//  delay(1000); 
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sevseg1:DIG1
sevseg1:DIG2
sevseg1:DIG3
sevseg1:DIG4
sevseg1:COM
sevseg1:CLN