Описание
Вывод случайного числа из отрезка [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++;
  }
}
				

Схема