lunes, 31 de marzo de 2014

Juego de luces sencillo para matriz 16x16

Se va acercando desde las 4 esquinas hacia el centro y cuando llega se enciende entero:

Código fuente:

//salidas que se van a utilizar
int latchPin = 8; //patilla LT
int clockPin = 12; //patilla SK
int dataPin = 11; //patilla RI1
//array en el que se va a contener toda la informacin de filas y columnas
byte dato[4];
byte i;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  dato[0]=0xFF;
  dato[1]=0xFF;
  dato[2]=0x00;
  dato[3]=0x00;
  envia_datos(dato);
}

void envia_datos(byte *matrix) {
  digitalWrite(latchPin, 0);
  for (byte i=4; i>2; i--) shiftOut(dataPin, clockPin, LSBFIRST, matrix[i-1]);
  for (byte i=2; i>0; i--) shiftOut(dataPin, clockPin, MSBFIRST, matrix[i-1]);
  digitalWrite(latchPin, 1);
  delay(500);
}

void loop() {
  dato[3]=0x01;
  dato[2]=0x80;
  dato[1]=0x7F;
  dato[0]=0xFE;
  envia_datos(dato);
  delay(500);
 
  for (i=0;i<6;i++){
    dato[3]*=2;  
    bitClear(dato[3],7);
    dato[2]/=2;
    bitClear(dato[2],0);
    dato[1]>>=1;
    bitSet(dato[1], 7);
    dato[0]<<=1;
    bitSet(dato[0], 0);
  envia_datos(dato);
  delay(500);  
  }
  dato[0]=0x00;
  dato[1]=0x00;
  dato[2]=0xFF;
  dato[3]=0xFF;
  envia_datos(dato);
 
  delay(500);
 
  dato[0]=0xFF;
  dato[1]=0xFF;
  dato[2]=0x00;
  dato[3]=0x00;
  envia_datos(dato);
 
  delay(500);

}

No hay comentarios:

Publicar un comentario