Este exemplo usa um driver de LEDs para controlar uma quantia quase sem fim de LEDs usando apenas 4 pinos do Arduino. Para isso, emprega-se o chip 4794 da Phillips. Encontre aqui mais informações sobre ele.
Drivers de LED têm um registrador de deslocamento embutido, que toma dados em forma serial e transforma-os em formato paralelo. É possível fazer encadeamentos de chips, e a cada encadeamento aumenta-se em 8 a quantidade de LEDs controláveis.
O código abaixo toma um valor contido na variável dato e o exibe em formato binário. Isto é, se dato valer 1, apenas o primeiro LED acende-se; se valer 255, todos os LEDs acendem-se.

Exemplo de conexão de um 4794
/* Desloque dados
* --------------
*
* Mostra um byte, contido em "dato", no conjunto de 8 LEDs
*
* (copyleft) 2005 K3, Malmo University
* @author: David Cuartielles, Marcus Hannerstig
* @hardware: David Cuartielles, Marcos Yarza
* @project: made for SMEE - Experiential Vehicles
*/
int data = 9;
int strob = 8;
int clock = 10;
int oe = 11;
int count = 0;
int dato = 0;
void setup()
{
beginSerial(9600);
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(strob, OUTPUT);
pinMode(oe, OUTPUT);
}
void PulseClock(void) {
digitalWrite(clock, LOW);
delayMicroseconds(20);
digitalWrite(clock, HIGH);
delayMicroseconds(50);
digitalWrite(clock, LOW);
}
void loop()
{
dato = 5;
for (count = 0; count < 8; count++) {
digitalWrite(data, dato & 01);
//serialWrite((dato & 01) + 48);
dato>>=1;
if (count == 7){
digitalWrite(oe, LOW);
digitalWrite(strob, HIGH);
}
PulseClock();
digitalWrite(oe, HIGH);
}
delayMicroseconds(20);
digitalWrite(strob, LOW);
delay(100);
serialWrite(10);
serialWrite(13);
delay(100); // waits for a moment
}