#define TOP       SEG_A
#define TOP_RIGHT SEG_B
#define BTM_RIGHT SEG_C
#define BTM       SEG_D
#define BTM_LEFT  SEG_E
#define TOP_LEFT  SEG_F
#define MIDDLE    SEG_G

#define DEC_PT    6
#define SEG_A     7
#define SEG_B     8
#define SEG_C     9
#define SEG_D     10
#define SEG_E     11
#define SEG_F     12
#define SEG_G     13

void setup() {
  
  bool  doPt;
  
  delay(2000);
  for (int i=DEC_PT;i<=SEG_G;i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, LOW);
  }
  doPt = false;
  for (int i=0;i<10;i++) {
    digit(i,doPt);
    delay(500);
    doPt = !doPt;
  }
}


void allOff(void) {

  for (int i=DEC_PT;i<=SEG_G;i++) {
    digitalWrite(i, LOW);
  }
}


void digit(int val,bool pt) {

  bool  badVal;

  badVal = false;
  allOff();
  switch(val) {
    case 0 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(BTM,HIGH);
      digitalWrite(BTM_LEFT,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
    break;
    case 1 :
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
    break;
    case 2 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(BTM_LEFT,HIGH);
      digitalWrite(BTM,HIGH);
    break;
    case 3 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(BTM,HIGH);
    break;
    case 4 :
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
    break;
    case 5 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(BTM,HIGH);
    break;
    case 6 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(BTM,HIGH);
      digitalWrite(BTM_LEFT,HIGH);
    break;
    case 7 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
    break;
    case 8 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(BTM,HIGH);
      digitalWrite(BTM_LEFT,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
      digitalWrite(MIDDLE,HIGH);
    break;
    case 9 :
      digitalWrite(TOP,HIGH);
      digitalWrite(TOP_RIGHT,HIGH);
      digitalWrite(BTM_RIGHT,HIGH);
      digitalWrite(MIDDLE,HIGH);
      digitalWrite(TOP_LEFT,HIGH);
    break;
    default : badVal = true; break;
  }
  if (pt && !badVal) digitalWrite(DEC_PT,HIGH);
}


void loop() {
  // put your main code here, to run repeatedly:

}
4-Digit Display