Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. //ST_CP Registro desplazamiento pin de reloj
  2. int latchPin = 8;
  3. //SH_CP Almacenamiento registro pin de reloj (pasador)
  4. int clockPin = 12;
  5. // DS Datos de entrada en serie
  6. int dataPin = 11;
  7. //variable para controlar el tiempo de encendido y apagado
  8. int tiempo;
  9. //variable que toma el valor del potenciometro
  10. int valor;
  11. //variable para seleconar el patron del movimiento de los leds
  12. int patron;
  13.  
  14. void setup() {
  15.   //pines de salida
  16.   pinMode(latchPin, OUTPUT);
  17.   pinMode(clockPin, OUTPUT);
  18.   pinMode(dataPin, OUTPUT);
  19.   //comunicacion serial a 9600bps
  20.   Serial.begin(9600);    
  21. }
  22.  
  23. void loop()
  24. {
  25.   //se inicializa con un tiempo de 100 milisegundos
  26.   tiempo = 100;  
  27.   //valor de tensión en el pin analógico A0
  28.   valor = analogRead(A0);
  29.   //se toma el valor para selecionar el patron
  30.   patron = map(valor,0,1023,0,8);  
  31.  
  32.   switch(patron){
  33.     case 0:
  34.       patronMoverIzquierda();      
  35.      break;
  36.      case 1:
  37.        patronMoverDerecha();
  38.       break;
  39.      case 2:
  40.        patronMoverDerechaIzquierda_IzquierdaDerecha();
  41.       break;
  42.      case 3:
  43.        patronMoverCentroFuera();
  44.       break;
  45.      case 4:
  46.        patronMoverFueraCentro();
  47.       break;
  48.      case 5:
  49.        patronMoverCentroFuera_FueraCentro();
  50.       break;
  51.      case 6:
  52.        patronMoverFueraCentro();
  53.        patron7();
  54.        break;
  55.      case 7:
  56.        patron8();
  57.        break;    
  58.   }
  59. }
  60.  
  61. void patronMoverIzquierda(){
  62.   //se define un patron
  63.   int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
  64.   //se recorre el vector
  65.   for(int i = 0; i < 8; i++){
  66.     //Se enciende el led, valor alto al pin digital
  67.     digitalWrite(latchPin, LOW);
  68.     shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
  69.     //Se apaga el led, valor bajo al pin pin digital
  70.     digitalWrite(latchPin, HIGH);  
  71.     //tiempo de espera
  72.     delay(tiempo);
  73.   }
  74. }
  75.  
  76. void patronMoverDerecha(){
  77.   //se define un patron
  78.   int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
  79.   //se recorre el vector
  80.   for(int i = 7; i >= 0; i--){
  81.     //Se enciende el led, valor alto al pin digital
  82.     digitalWrite(latchPin, LOW);
  83.     shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
  84.     //Se apaga el led, valor bajo al pin pin digital
  85.     digitalWrite(latchPin, HIGH);  
  86.     //tiempo de espera
  87.     delay(tiempo);
  88.   }
  89. }
  90.  
  91. void patronMoverDerechaIzquierda_IzquierdaDerecha(){
  92.   patronMoverIzquierda();
  93.   patronMoverDerecha();
  94. }
  95.  
  96. void patronMoverCentroFuera(){
  97.   //se define un patron
  98.   int moverIzquierda[4] = {24,36,66,129};
  99.   //se recorre el vector
  100.   for(int i = 0; i < 4; i++){
  101.     //Se enciende el led, valor alto al pin digital
  102.     digitalWrite(latchPin, LOW);
  103.     shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
  104.     //Se apaga el led, valor bajo al pin pin digital
  105.     digitalWrite(latchPin, HIGH);  
  106.     //tiempo de espera
  107.     delay(tiempo);
  108.   }
  109. }
  110.  
  111. void patronMoverFueraCentro(){
  112.   //se define un patron
  113.   int moverIzquierda[4] = {24,36,66,129};
  114.   //se recorre el vector
  115.   for(int i = 3; i >= 0; i--){
  116.     //Se enciende el led, valor alto al pin digital
  117.     digitalWrite(latchPin, LOW);
  118.     shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[i]);
  119.     //Se apaga el led, valor bajo al pin pin digital
  120.     digitalWrite(latchPin, HIGH);  
  121.     //tiempo de espera
  122.     delay(tiempo);
  123.   }
  124. }
  125.  
  126. void patronMoverCentroFuera_FueraCentro(){
  127.   //se combina los dos metodos para definir otro patron
  128.   patronMoverCentroFuera();
  129.   patronMoverFueraCentro();
  130. }
  131.  
  132. void patron7(){
  133.   int count = 1;
  134.   //se define un patron
  135.   int moverIzquierda[8] = {1,2,4,8,16,32,64,128};
  136.  
  137.   for(int i = 0; i < 8; i++){
  138.    //se recorre el vector
  139.    for(int j = 0; j < 8; j++){
  140.      //se detiene el led en la posicion antes de un led encendido
  141.      if((7-i) > j){    
  142.        digitalWrite(latchPin, LOW);
  143.        //Se enciende el led, valor alto al pin digital
  144.        shiftOut(dataPin, clockPin, MSBFIRST, moverIzquierda[j]+count);
  145.        //Se apaga el led, valor bajo al pin pin digital
  146.        digitalWrite(latchPin, HIGH);  
  147.        //tiempo de espera
  148.        delay(tiempo);  
  149.      }else{
  150.       //detemos el ciclo
  151.       break;
  152.      }
  153.    }
  154.     //se guarda los valores para iluminar los LEDs
  155.     count += moverIzquierda[7-i];  
  156.   }
  157. }
  158.  
  159. void patron8(){
  160.   int count = 129;
  161.   //se define un patron
  162.   int mover[6] = {2,4,8,16,32,64};
  163.   //le damos una espera de 80 milisegundos  
  164.   tiempo = 80;
  165.   //generamos diferentes patrones
  166.   patronMoverIzquierda();
  167.   patronMoverIzquierda();
  168.   patronMoverDerecha();
  169.   patronMoverDerecha();
  170.   patronMoverDerechaIzquierda_IzquierdaDerecha();
  171.   patronMoverDerechaIzquierda_IzquierdaDerecha();
  172.    
  173.   do{
  174.     //se recorre el vector
  175.     for(int i = 0; i < 6; i++){      
  176.      //Se enciende el led, valor alto al pin digital
  177.      digitalWrite(latchPin, LOW);
  178.      shiftOut(dataPin, clockPin, MSBFIRST, mover[i]+count);
  179.      //Se apaga el led, valor bajo al pin pin digital
  180.      digitalWrite(latchPin, HIGH);  
  181.      //tiempo de espera
  182.      delay(tiempo);        
  183.     }
  184.     //se recorre el vector
  185.     for(int i = 5; i >= 0; i--){    
  186.      //Se enciende el led, valor alto al pin digital
  187.      digitalWrite(latchPin, LOW);
  188.      shiftOut(dataPin, clockPin, MSBFIRST, mover[i]+count);
  189.      //Se apaga el led, valor bajo al pin pin digital
  190.      digitalWrite(latchPin, HIGH);  
  191.      //tiempo de espera
  192.      delay(tiempo);        
  193.    }
  194.    
  195.   tiempo-=10;    
  196.   }while(tiempo > 0);
  197.    
  198.   tiempo = 20;  
  199.   for(int i = 15; i >= 0; i--){
  200.     if(count == 129){
  201.       count = 0;
  202.     }else{
  203.       count = 129;
  204.     }
  205.     //Se enciende el led, valor alto al pin digital
  206.     digitalWrite(latchPin, LOW);
  207.     shiftOut(dataPin, clockPin, MSBFIRST, count);
  208.     //Se apaga el led, valor bajo al pin pin digital
  209.     digitalWrite(latchPin, HIGH);
  210.     //tiempo de espera  
  211.     delay(tiempo);
  212.   }      
  213.   patronMoverDerechaIzquierda_IzquierdaDerecha();
  214.   patronMoverDerechaIzquierda_IzquierdaDerecha();
  215.   tiempo = 40;  
  216.   patronMoverCentroFuera_FueraCentro();
  217.   patronMoverCentroFuera_FueraCentro();
  218. }