#define pines 3 //creamos la variable maxleds de 8 elementos
#define pot A0 //creamos la variable pot con el pin A0
const int pinLatch = 2; // Este pin se sets baja cuando quiero que el 595 para escuchar
const int pinReloj = 3; // Este pin es utilizado por shiftout para alternar decir que hay otro granito de arena para cambiar
const int pinDato = 4; // Este pin se utiliza para pasar al siguiente bit
int led[pines] = {2,3,4}; //creamos un vector para los pines a utilizar
// creamos las 8 secuencias
int sec1[15]={128,64,32,16,8,4,2,1,2,4,8,16,32,64,128};
int sec2[7]={24,36,66,129,66,36,24};
int sec3[7]={136,68,34,17,34,68,136};
int sec4[8]={64,16,4,1,2,8,32,128};
int sec5[7]={66,24,36,129,36,24,66};
int sec6[6]={170,85,40,20,8,16};
int sec7[16]={143,79,47,31,23,35,65,128,241,242,244,248,232,196,130,1};
int sec8[25]={128,64,32,16,8,4,2,1,255,24,36,66,129,66,36,24,255,1,2,4,8,16,32,64,128};
// Solo se ejecuta una vez, al iniciar o resetear el Arduino
void setup ()
{
for (int i=0;i<pines;i++)
pinMode(led[i],OUTPUT); // El pines del 2 al 4 seran de salida
}
// se ejecuta siempre como un ciclo
void loop()
{
int valor = analogRead(pot); // lee el valor del potenciometro
int i=map(valor, 0, 1023, 0, 7); // hace un mapeo o conversion
rutina(i); // llama a la funcion rutina
}
void rutina(int i) //funcion para enceder el led
{
switch(i)
{
case 0: //hacer algo cuando sea igual a 0
for(int j=0;j<15;j++)
{
activacion(sec1[j]);
delay(60);
}
break;
case 1: //hacer algo cuando sea igual a 1
for(int j=0;j<7;j++)
{
activacion(sec2[j]);
delay(60);
}
break;
case 2: //hacer algo cuando sea igual a 2
for(int j=0;j<7;j++)
{
activacion(sec3[j]);
delay(60);
}
break;
case 3: //hacer algo cuando sea igual a 3
for(int j=0;j<8;j++)
{
activacion(sec4[j]);
delay(60);
}
break;
case 4: //hacer algo cuando sea igual a 4
for(int j=0;j<7;j++)
{
activacion(sec5[j]);
delay(100);
}
break;
case 5: //hacer algo cuando sea igual a 4
for(int j=0;j<6;j++)
{
activacion(sec6[j]);
delay(60);
}
break;
case 6: //hacer algo cuando sea igual a 4
for(int j=0;j<16;j++)
{
activacion(sec7[j]);
delay(60);
}
break;
case 7: //hacer algo cuando sea igual a 4
for(int j=0;j<25;j++)
{
activacion(sec8[j]);
delay(60);
}
break;
}
}
// Uso de la orden interna shiftout función
void activacion(int i)
{
digitalWrite (pinLatch, LOW); // señal al 595 para escuchar los datos
shiftOut (pinDato, pinReloj, MSBFIRST, i); // Señal de la 595 que estoy hecho enviando
digitalWrite (pinLatch, HIGH); // sendSerialData1
delay(50);
}