Le funzioni posso ricevere un parametro. Per iniziare potresti avere una funzione DisplayNum() a cui passi 0-9 e -1 per spegnere. Per ora non ottimizzato:
void DisplayNum(p_Num)
{ switch(p_Num)
{ case -1: // spengo tutti i segmenti, anche DP
digitalWrite(pinDP, LOW);
for (int i = 4; i <= 10; i++) digitalWrite(ledPin, LOW);
break;
case 0:
...
break;
case 1:
digitalWrite(8, LOW); // scrivo il numero 1
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
break;
etc.
}
Nel programma scriverai:
delay(900);
DisplayNum(7);
digitalWrite(pinDP, HIGH);
tone(pinPiezo, notes[1]);
invece di:
delay(900);
digitalWrite(5, LOW); // scrivo il numero 7, lampeggio DP e suono bip 2 volte
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(10, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
tone(11, notes[1]);