Luminosité afficheur

Bonjour tout le monde,
Je bosse sur un projet d'afficheur 7segments 12volt et j'ai un petit soucis de tension...
Voilà le schéma électrique qui devrait être assez clair

J'utilise la broche "Blanking" des décodeurs pour afficher ou non mes chiffres. Les transistors sont des BC557B.

Et voici mon code :

#include <Wire.h>

byte digits[10] = {
  B00000000 ,
  B10000000 ,
  B01000000 ,
  B11000000 ,
  B00100000 ,
  B10100000 ,
  B01100000 ,
  B11100000 ,
  B00010000 ,
  B10010000 
};

byte aff[3] = {
  B00000000 ,
  B00000001 ,
  B00000010 ,
};
long unsigned tmpspresent = 0;
 long unsigned temps = 0;
 int intervalle = 1000;
 byte seconde = 0;

  
void setup() {  
   Wire.begin(); //creates a Wire object


void loop() {

  tmpspresent = millis();
  
    if (tmpspresent - temps >= intervalle) {
    temps = tmpspresent;
    seconde ++;
      if (seconde >= 100) {
       seconde = 0;
    }
}
    decoupageNombre(seconde);

} 

    void decoupageNombre(int seconde)
    {
            byte numero = 0;
            byte unite = seconde %10;
            byte dizaine = seconde /10;
    
            numero = 2;
            afficherChiffre(dizaine, numero);
            delay(1);
           
            numero = 1;
            
            afficherChiffre(unite, numero);
            delay(1);
              
    }
    
    void afficherChiffre(byte chiffre, byte numero)
    {
    
            byte x = chiffre;
            byte y = numero;
            
            
            Wire.beginTransmission(0x20); //starts talking to slave device
            Wire.write(0x13); //selects the GPIOB pins
            Wire.write(B00000011); //turns on pin 0 of GPIOB
            Wire.endTransmission();//ends communication with the device
            Wire.beginTransmission(0x20); //starts talking to slave device
            Wire.write(0x12); //selects the GPIOA pins
            Wire.write(digits[x]); // turns on pins 0 and 1 of GPIOA
            Wire.endTransmission(); //ends communication with the device
            Wire.beginTransmission(0x20); //starts talking to slave device
            Wire.write(0x13); //selects the GPIOB pins
            Wire.write(aff[y]); //turns on pin 0 of GPIOB
            Wire.endTransmission();//ends communication with the device
            
            }

Ce code ne sert qu'a compter les secondes sur 2 afficheurs mais à terme, je vais afficher l'heure et un score avec un total de 8 afficheurs.
Mon soucis est qu'il y a une baisse de tension au borne des leds ce qui engendre une luminosité bien trop faible. Avec le code ci-dessus j'ai 6volts aux borne de mes leds mais j'ai remarqué que en passant la fréquence de rafraichissement des afficheurs de 1milliseconde à 1seconde (dans le "void decoupageNombre") j'obtiens 12v. Évidemment 1seconde de rafraichissement c'est nul pour afficher mes chiffres...

Avez-vous une idée de la source de mon problème ? Problème de câblage, programmation... ?

Il faudrait un peu allonger les délais dans decoupageNombre(). Tu n'allume tes led que pendant 1ms c'est trop court.

Je ne sais pas trop quelle LEDs tu utilises mais aucune résistance de limitation c'est pas très bon pour les LEDs.

Enfaite j'ai fais des chaines composé de 5 leds et 1 résistance en série pour pouvoir y mettre du 12v.

Et oui je vais essayé de rallonger le temps mais je ne peux pas mettre bcp plus, quand j'aurai 8 afficheurs je devrai mettre 8 fois ce petit delay. Et on verra mes chiffres clignoter si c'est trop long