Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #define pines 3 //creamos la variable maxleds de 8 elementos
  2. #define pot A0    //creamos la variable pot con el pin A0
  3.  
  4. const int pinLatch = 2;  // Este pin se sets baja cuando quiero que el 595 para escuchar
  5. const int pinReloj = 3;  // Este pin es utilizado por shiftout para alternar decir que hay otro granito de arena para cambiar
  6. const int pinDato = 4;  // Este pin se utiliza para pasar al siguiente bit
  7.  
  8. int led[pines] = {2,3,4}; //creamos un vector para los pines a utilizar
  9.  
  10. // creamos las 8 secuencias
  11. int sec1[15]={128,64,32,16,8,4,2,1,2,4,8,16,32,64,128};
  12. int sec2[7]={24,36,66,129,66,36,24};
  13. int sec3[7]={136,68,34,17,34,68,136};
  14. int sec4[8]={64,16,4,1,2,8,32,128};
  15. int sec5[7]={66,24,36,129,36,24,66};
  16. int sec6[6]={170,85,40,20,8,16};
  17. int sec7[16]={143,79,47,31,23,35,65,128,241,242,244,248,232,196,130,1};
  18. 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};
  19.  
  20. // Solo se ejecuta una vez, al iniciar o resetear el Arduino
  21. void setup ()
  22. {
  23.   for (int i=0;i<pines;i++)
  24.   pinMode(led[i],OUTPUT); // El pines del 2 al 4 seran de salida
  25. }
  26.  
  27.  
  28. // se ejecuta siempre como un ciclo
  29. void loop()
  30. {
  31.   int valor = analogRead(pot); // lee el valor del potenciometro
  32.   int i=map(valor, 0, 1023, 0, 7); // hace un mapeo o conversion
  33.   rutina(i);                   // llama a la funcion rutina
  34. }
  35.  
  36. void rutina(int i) //funcion para enceder el led
  37. {
  38.    switch(i)
  39.   {
  40.   case 0: //hacer algo cuando sea igual a 0
  41.     for(int j=0;j<15;j++)
  42.     {
  43.       activacion(sec1[j]);
  44.       delay(60);
  45.     }
  46.     break;
  47.   case 1: //hacer algo cuando sea igual a 1
  48.     for(int j=0;j<7;j++)
  49.     {
  50.       activacion(sec2[j]);
  51.       delay(60);
  52.     }
  53.     break;
  54.   case 2: //hacer algo cuando sea igual a 2
  55.     for(int j=0;j<7;j++)
  56.     {
  57.       activacion(sec3[j]);
  58.       delay(60);
  59.     }
  60.     break;
  61.   case 3: //hacer algo cuando sea igual a 3
  62.     for(int j=0;j<8;j++)
  63.     {
  64.       activacion(sec4[j]);
  65.       delay(60);
  66.     }
  67.     break;
  68.   case 4: //hacer algo cuando sea igual a 4
  69.     for(int j=0;j<7;j++)
  70.     {
  71.       activacion(sec5[j]);
  72.       delay(100);
  73.     }
  74.     break;  
  75.   case 5: //hacer algo cuando sea igual a 4
  76.     for(int j=0;j<6;j++)
  77.     {
  78.       activacion(sec6[j]);
  79.       delay(60);
  80.     }
  81.     break;  
  82.    case 6: //hacer algo cuando sea igual a 4
  83.     for(int j=0;j<16;j++)
  84.     {
  85.       activacion(sec7[j]);
  86.       delay(60);
  87.     }
  88.     break;  
  89.     case 7: //hacer algo cuando sea igual a 4
  90.     for(int j=0;j<25;j++)
  91.     {
  92.       activacion(sec8[j]);
  93.       delay(60);
  94.     }
  95.     break;    
  96.   }
  97. }
  98.  
  99. // Uso de la orden interna shiftout función
  100. void activacion(int i)
  101. {
  102.   digitalWrite (pinLatch, LOW); // señal al 595 para escuchar los datos
  103.   shiftOut (pinDato, pinReloj, MSBFIRST, i); // Señal de la 595 que estoy hecho enviando  
  104.   digitalWrite (pinLatch, HIGH); // sendSerialData1  
  105.   delay(50);  
  106. }