Luminosità display 7 segmenti in multiplexing

Salve a tutti ho un problema: ho questo programma per contare le cifre su 8 display a sette segmnti, comandati tramite multiplexing, cioè con 7 pin mando i segmenti che devono essere accesi e con altri 3 mando in binario la cifra su cui devono essere posizionati. La questione che mi affligge da un bel po è: come posso regolare la luminosità di codesti ?

#include <TimerOne.h>
 
int dig1 = 11,dig2 = 9,dig3 = 10;
int a = 3,b = 4,c = 5,d = 6,e = 7,f = 8,g = 12;
 
char currDig = 0;
char Dmilioni,milioni,Cmigliaia,Dmigliaia,migliaia,centinaia,decine,unita;
 
// Array delle cifre e lettere (A,B,C,D,E,F,G)
char letters[18][7] = {
{0,0,0,0,0,0,1},        // 0
{1,0,0,1,1,1,1},        // 1
{0,0,1,0,0,1,0},        // 2
{0,0,0,0,1,1,0},        // 3
{1,0,0,1,1,0,0},        // 4
{0,1,0,0,1,0,0},        // 5
{0,1,0,0,0,0,0},        // 6
{0,0,0,1,1,1,1},        // 7
{0,0,0,0,0,0,0},        // 8
{0,0,0,0,1,0,0},        // 9
{0,0,0,1,0,0,0},        // A
{1,1,0,0,0,0,0},        // b
{1,1,1,0,0,1,0},        // c
{1,0,0,0,0,1,0},        // d
{0,1,1,0,0,0,0},        // E
{0,1,1,1,0,0,0},        // F
{0,1,0,0,0,0,1},        // G
{1,1,0,1,0,0,0}         // h
};

void setup()
{
 
  Timer1.initialize(2000);         // initialize timer1, and set a 1,5 millisecond period
  Timer1.attachInterrupt(setDigit);  // attaches callback() as a timer overflow interrupt
  pinMode(dig1,OUTPUT);
  pinMode(dig2,OUTPUT);
  pinMode(dig3,OUTPUT);
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);
  pinMode(e,OUTPUT);
  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  Serial.begin(9600);
 
}
 
void loop()
{
  long i=0;    //inserita la variabile di tipo "long" in modo da non limitare i numeri a 32000
  for(i=0;i<=99999999;i++)
  {
  unita=i%10; 
  decine=(i%100)/10;
  centinaia=(i%1000)/100;
  migliaia=(i%10000)/1000;
  Dmigliaia=(i%100000)/10000;
  Cmigliaia=(i%1000000)/100000;
  milioni=(i%10000000)/1000000; 
  Dmilioni=(i%100000000)/10000000;
     
    delay(1);
    Serial.println(i);
  }
 
}

void SendLetters(unsigned char digs)
{
 
  digitalWrite(a,letters[digs][0]);
  digitalWrite(b,letters[digs][1]);
  digitalWrite(c,letters[digs][2]);
  digitalWrite(d,letters[digs][3]);
  digitalWrite(e,letters[digs][4]);
  digitalWrite(f,letters[digs][5]);
  digitalWrite(g,letters[digs][6]);
 
}
void setDigit()
{
 
  if(currDig++>7) currDig=0;
  
  switch(currDig)
  {
 
    case 7:
    SendLetters(Dmilioni);
    digitalWrite(dig1,1);
    digitalWrite(dig2,1);
    digitalWrite(dig3,1);
    break;
    
    case 6:
    SendLetters(milioni);
    digitalWrite(dig1,1);
    digitalWrite(dig2,1);
    digitalWrite(dig3,0);
    break;
    
    case 5:
    SendLetters(Cmigliaia);
    digitalWrite(dig1,1);
    digitalWrite(dig2,0);
    digitalWrite(dig3,1);
    break; 
    
    case 4:
    SendLetters(Dmigliaia);
    digitalWrite(dig1,1);
    digitalWrite(dig2,0);
    digitalWrite(dig3,0);
    break;
    
    case 3:
    SendLetters(migliaia);
    digitalWrite(dig1,0);
    digitalWrite(dig2,1);
    digitalWrite(dig3,1);
    break;
 
    case 2:
    SendLetters(centinaia);
    digitalWrite(dig1,0);
    digitalWrite(dig2,1);
    digitalWrite(dig3,0);
    break;
 
    case 1:
    SendLetters(decine);
    digitalWrite(dig1,0);
    digitalWrite(dig2,0);
    digitalWrite(dig3,1);
    break;
 
    case 0:
    SendLetters(unita);
    digitalWrite(dig1,0);
    digitalWrite(dig2,0);
    digitalWrite(dig3,0);
    break;
 
 
  }
 
}

Nella sezione internazionale è ammesso usare solo l'inglese. Per i post in italiano devi scrivere qui.

Visto che sei nuovi, leggi anche il regolamento e presentati.