El Charlieplexing és una tècnica per controlar molts LED mitjançant uns quants pins d'E / S. El Charlieplexing és el mateix que el multiplexat, però utilitza la lògica de tres estats (entrada alta, baixa) per reduir dràsticament el nombre de pins i guanyar eficiència en la multiplexació. La tècnica de Charlieplexing rep el nom del seu inventor, Charlie Allen, que va inventar la tècnica el 1995. Anteriorment utilitzàvem la tècnica de multiplexació a Arduino per connectar una pantalla de 4 dígits de 7 segments i conduir una matriu LED de 8x8.
Charlieplexing us permet controlar N * (N - 1) LED, on N és el número de pins. Per exemple, podeu controlar 12 LED mitjançant 4 pins Arduino 4 * (4-1) = 12. Els LED són díodes i, en díodes, el corrent flueix en una sola direcció. Així, a Charlieplexing, connectem dos LED paral·lels entre si però amb polaritat oposada de manera que només s’encengui un LED alhora. Quan es tracta d’Arduino o d’altres plaques de microcontroladors, mai no es tenen prou pins d’entrada / sortida. Si esteu treballant en un projecte en què necessiteu connectar la pantalla LCD, un munt de LEDs i alguns sensors, ja no teniu pins. En aquesta situació, podeu carregar els LEDs flexibles per reduir el nombre de pins.
En aquest tutorial, utilitzarem la tècnica de Charlieplexing per controlar els 12 LED mitjançant 4 pins Arduino.
Components necessaris
- Arduino UNO
- LED (12)
- 4 resistències (330 ohms)
- Jumper Wires
- Taula de pa
Esquema de connexions

Bàsicament, en aquest diagrama de circuits, es connecten 12 LEDs amb 4 pins Arduino mitjançant resistències. Cada pin d'Arduino està connectat amb tres LED. Hi ha sis grups de LEDs i, en cada grup, es connecten 2 LEDs, i tots dos LED són paral·lels entre si però amb polaritat oposada de manera que només s’encén un LED a la vegada. Per tant, segons el diagrama del circuit per engegar el led 1, cal que hi hagi un senyal HIGH al pin A i un senyal BAIX al pin B, i que s’hagi de desconnectar el pin C i D. Es seguirà el mateix procediment per a la resta de LED. A continuació es mostra la taula completa de paràmetres de pins per a cada LED:
| LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
| 1 | ALTA | BAIX | ENTRADA | ENTRADA |
| 2 | BAIX | ALTA | ENTRADA | ENTRADA |
| 3 | ENTRADA | ALTA | BAIX | ENTRADA |
| 4 | ENTRADA | BAIX | ALTA | ENTRADA |
| 5 | ENTRADA | ENTRADA | ALTA | BAIX |
| 6 | ENTRADA | ENTRADA | BAIX | ALTA |
| 7 | ALTA | ENTRADA | BAIX | ENTRADA |
| 8 | BAIX | ENTRADA | ALTA | ENTRADA |
| 9 | ENTRADA | ALTA | ENTRADA | BAIX |
| 10 | ENTRADA | BAIX | ENTRADA | ALTA |
| 11 | ALTA | ENTRADA | ENTRADA | BAIX |
| 12 | BAIX | ENTRADA | ENTRADA | ALTA |
Després de les connexions, el maquinari sembla la imatge següent. Com podeu veure a la imatge, hi ha sis grups de LEDs i en cada grup es connecten 2 LED oposats entre si. El mòdul Arduino UNO funciona amb un port USB.

Explicació del codi
Al final d’aquest tutorial es dóna un codi complet amb un vídeo de treball; aquí expliquem el programa complet per entendre el funcionament del projecte.
A l’inici del codi Arduino, definiu tots els pins als quals estan connectats els LED. Després, definiu el nombre total de LEDs i l'estat de leds.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Ara creeu una matriu per encendre i apagar els LED en una seqüència, podeu canviar la seqüència canviant l'estat i la configuració del pin. Segons aquesta matriu, el LED1 s'encendrà primer, després el LED2, etc.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{OUTPUT, OUTPUT, INPUT, INPUT}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGH, BAIX, BAIX}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {BAIX, ALT, BAIX, BAIX}}, ……………………………. ……………………………..
Ara dins del bucle buit , el programa executarà la matriu LED_COUNT per activar i apagar els LED en la seqüència indicada.
bucle buit () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); endarreriment (1000 / LED_Num); }
Ara connecteu l’Arduino amb l’ordinador portàtil i trieu la placa i el port correctament i feu clic al botó Puja. Després de penjar el codi, els LEDs haurien de començar a parpellejar.

Així doncs, és així com es pot utilitzar la tècnica Charlieplexing per controlar molts LEDs utilitzant menys pins Arduino. Podeu utilitzar aquest mètode per controlar més nombre de LED. Per exemple, si voleu controlar 20 LEDs, només cal que editeu la matriu i afegiu les condicions per a la resta de LEDs.
A continuació, trobareu el codi complet i el vídeo de treball.
