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 }