Вывод случайного числа из отрезка [0,9999] на 4-циферный 7-сегментный дисплей.

Общий вид дисплея. Общее количество выходов 12.
Схема дисплея. Каждым гомологичным (одинаковое положение в каждой цифре) сегментам присваивается определенный вход и сокращение (a,b,...dp). Выходы же (d1, d2, d3, d4) позволяют замкнуть цепь при значении пина LOW, таким образом они выступают в качестве земли (GND). Из схемы понятно, что невозможно одновременно независимо включить два сегмента в разных цифрах. Поэтому приходится очень быстро переобозначать состояния сегментов и цифр, так что это не было бы заметно человеческому глазу (см код delay(2)).
const int a = 12;
const int b = 11;
const int c = 10;
const int d = 9;
const int e = 8;
const int f = 7;
const int g = 6;
const int p = 5;
const int d1 = 1;
const int d2 = 2;
const int d3 = 3;
const int d4 = 4;
const byte numbers[10] =
// short "switch-on" record for numbers
// Bgfedcba order; 1 - on, 0 - off
{
B0111111, // 0
B0000110, // 1
B1011011, // 2
B1001111, // 3
B1100110, // 4
B1101101, // 5
B1111101, // 6
B0000111, // 7
B1111111, // 8
B1101111 // 9
};
void Display(int num)
{
for (int j = 0; j < 8; j++)
digitalWrite(12-j, bitRead(numbers[num], j) );
}
void setup()
{
for(int i=1;i<=12;i++)
pinMode(i,OUTPUT);
randomSeed(analogRead(0));
}
void loop()
{
int t = 1; // current digital
int n=random(9999); // rand_max = 9999
int ar[4]={11,11,11,11}; // 11 - empty
int i=0;
while(n!=0){
ar[i]=n%10;
n=n/10;
i++;
}
for(int j=1; j<1000;j++){
for(int i=1; i<=4 ; i++){ // clear digitals
digitalWrite(i,HIGH);
}
for(int i=5; i<=12 ; i++){ // clear numbers
digitalWrite(i,LOW);
}
digitalWrite(t,LOW);
if (ar[t-1]!=11){
Display(ar[t-1]);
}
delay(2); // trick
if (t==4){
t=0;
}
t++;
}
}