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.