//ST_CP Registro desplazamiento pin de reloj
int latchPin = 8;
//SH_CP Almacenamiento registro pin de reloj (pasador)
int clockPin = 12;
// DS Datos de entrada en serie
int dataPin = 11;
//variable para controlar el tiempo de encendido y apagado
int tiempo;
//variable que toma el valor del potenciometro
int valor;
//variable para seleconar el patron del movimiento de los leds
int patron;
void setup() {
//pines de salida
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//comunicacion serial a 9600bps
Serial.begin(9600);
}
void loop()
{
//se inicializa con un tiempo de 100 milisegundos
tiempo = 100;
//valor de tensión en el pin analógico A0
valor = analogRead(A0);
//se toma el valor para selecionar el patron
patron = map(valor,0,1023,0,8);
switch(patron){
case 0:
patronMoverIzquierda();
break;
case 1:
patronMoverDerecha();
break;
case 2:
patronMoverDerechaIzquierda_IzquierdaDerecha();
break;
case 3:
patronMoverCentroFuera();
break;
case 4:
patronMoverFueraCentro();
break;
case 5:
patronMoverCentroFuera_FueraCentro();
break;
case 6:
patronMoverFueraCentro();
patron7();
break;
case 7:
patron8();
break;
}
}
void patronMoverIzquierda(){
//se define un patron
int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
//se recorre el vector
for(int i = 0; i < 8; i++){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
}
void patronMoverDerecha(){
//se define un patron
int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
//se recorre el vector
for(int i = 7; i >= 0; i--){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
}
void patronMoverDerechaIzquierda_IzquierdaDerecha(){
patronMoverIzquierda();
patronMoverDerecha();
}
void patronMoverCentroFuera(){
//se define un patron
int moverIzquierda[4] = {24,36,66,129};
//se recorre el vector
for(int i = 0; i < 4; i++){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
}
void patronMoverFueraCentro(){
//se define un patron
int moverIzquierda[4] = {24,36,66,129};
//se recorre el vector
for(int i = 3; i >= 0; i--){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
}
void patronMoverCentroFuera_FueraCentro(){
//se combina los dos metodos para definir otro patron
patronMoverCentroFuera();
patronMoverFueraCentro();
}
void patron7(){
int count = 1;
//se define un patron
int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
for(int i = 0; i < 8; i++){
//se recorre el vector
for(int j = 0; j < 8; j++){
//se detiene el led en la posicion antes de un led encendido
if((7-i) > j){
digitalWrite(latchPin, LOW);
//Se enciende el led, valor alto al pin digital
shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[j]+count);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}else{
//detemos el ciclo
break;
}
}
//se guarda los valores para iluminar los LEDs
count += moverIzquierda[7-i];
}
}
void patron8(){
int count = 129;
//se define un patron
int mover[6] = {2,4,8,16,32,64};
//le damos una espera de 80 milisegundos
tiempo = 80;
//generamos diferentes patrones
patronMoverIzquierda();
patronMoverIzquierda();
patronMoverDerecha();
patronMoverDerecha();
patronMoverDerechaIzquierda_IzquierdaDerecha();
patronMoverDerechaIzquierda_IzquierdaDerecha();
do{
//se recorre el vector
for(int i = 0; i < 6; i++){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, mover[i]+count);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
//se recorre el vector
for(int i = 5; i >= 0; i--){
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, mover[i]+count);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
tiempo-=10;
}while(tiempo > 0);
tiempo = 20;
for(int i = 15; i >= 0; i--){
if(count == 129){
count = 0;
}else{
count = 129;
}
//Se enciende el led, valor alto al pin digital
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, count);
//Se apaga el led, valor bajo al pin pin digital
digitalWrite(latchPin, HIGH);
//tiempo de espera
delay(tiempo);
}
patronMoverDerechaIzquierda_IzquierdaDerecha();
patronMoverDerechaIzquierda_IzquierdaDerecha();
tiempo = 40;
patronMoverCentroFuera_FueraCentro();
patronMoverCentroFuera_FueraCentro();
}