Il multiplexe
Les 3 PNP pilote les lignes
Les 8 transistors de l'ULN2803 pilotent les colonnes
Avec un timer il balaye les 3 lignes et a chaque top il sort sur les colonnes le pattern
On ne peut pas utiliser de PWM dans ce cas, il faut appliquer un BAM ou MIBAM.
Le timer générant une interruption, le balayage se fait sous interruption et le loop reste libre pour l'application.
PS: le lien marche très bien : TKJ Electronics » Arduino RGB LED Controller
PPS: D'après son code il utilise le PWM (analogWrite). Il explique effectivement qu'il a augmenté la fréquence du PWM pour qu'elle soit bien supérieure a celle de son timer de balayage.
Je préfère le BAM, moins bricole.