Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Driver de LEDs

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

Código

/* 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
}