Consigli per un contatore numerico?

una delle prime cose che si impara nella programmazione è l'uso delle funzioni.
Ti semplificano concettualmente il lavoro dividendolo in sottoproblemi e riducono il codice da riscrivere perchè possono essere riutilizzate.

Io farei:

  • una funzione che fa un check (accende tutti i led)
  • una che spegne tutti i led
  • una funzione che riceve in argomento il numero intero da visualizzare ed esegue l'accensione dei led. dovrai usare uno switch case sicuramente.

il resto del codice di controllo dei pulsanti e l'incremento della variabile può stare nel loop.

esempio in semi-pseudocodice

int val;

void setup() {
  checkschermo();        // accende tutti i led
  delay(1000);           // lui mantiene accesi 1 sec
  puliscischermo();      // spegne tutti i led
}

void loop() {
  if (premuto il tasto 1) {           // se è stato premuto il tasto "su" esegue la visualizzazione di tutti i numeri da 0 a 9
    for (val = 0; val <= 9; val++) {  // ciclo for assegna alla variabile var il valore 0 e ad ogni ciclo esegue le 3 righe ed incrementa il valore di val di 1
      visualizzanumero(val);          // visualizza il numero
      delay(1000);                    // lo mantiene per 1 secondo
      puliscischermo();               // cancella il numero spegnendo i led
    }
  }
  if (premuto il tasto 2) {           // se è stato premuto il tasto "giù" esegue la visualizzazione di tutti i numeri da 9 a 0
    for (val = 9; val >= 0; val--) {  // ciclo for assegna alla variabile var il valore 9 e ad ogni ciclo esegue le 3 righe ed decrementa il valore di val di 1
      visualizzanumero(val);
      delay(1000);
      puliscischermo();
    }
  }
}

/*funzione che riceve un numero intero e accende i led rispettivi per visualizzarne il valore */
void visualizzanumero(int num) {
  switch (num) {
    case 0:
      digitalWrite(1, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      break;
    case 1:
      ...
    case n:
      //etc etc
  }
}

/* funzione che spegne tutti i led*/
void puliscischermo() {
  digitalWrite(1, LOW);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}

/* funzione che accende tutti i led*/
void checkschermo() {
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
}

in un secondo momento magari metterei mano alla funzione visualizzanumero() cercando di renderla più elegante e compatta. Un modo semplice potrebbe essere di usare un ciclo for per passare a digitalWrite il numero della porta e il relativo stato, magari letto da un array.