Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. //laboratorio 4
  2.  
  3. // se inicializan los pines para en envio de los datos
  4. // al integrado
  5. int latchPin = 8;
  6. int clockPin = 9;
  7. int dataPin = 7;
  8.  
  9. // se inicializan los arreglos para cada patrón
  10. int dato;
  11. int P_A[17] = {0, 1, 3, 7, 15, 31, 63, 127, 255, 127, 63, 31, 15, 7, 3, 1, 0};
  12. int P_B[16] = {0, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 2, 1, 0};
  13. int P_C[9] = {0, 129, 66, 36, 24, 36, 66, 129, 0 };
  14. int P_D[10] = {0, 1, 5, 21, 85, 213, 245, 253, 255, 0};
  15. int P_E[7] = {0, 255, 189, 165, 161, 129, 0};
  16. int P_F[13] = {0, 1, 129, 131, 195, 199, 231, 239, 255, 231, 195, 129, 0};
  17. int P_G[9] = {0, 3, 15, 63, 255, 243, 240, 192, 0};
  18. int P_H[9] = {0, 240, 255, 15, 255, 15, 255, 240, 0 };
  19.  
  20. // variable para la lectura del dato serial desde processing
  21. char Letra;
  22.  
  23. // config del programa
  24. void setup() {
  25.  
  26.   // se configuran los pines como salidas y el modulo de com serial
  27.   pinMode(latchPin, OUTPUT);
  28.   pinMode(dataPin, OUTPUT);  
  29.   pinMode(clockPin, OUTPUT);
  30.   Serial.begin(9600);
  31.  
  32. }
  33.  
  34. // Bucle de ejecución del programa
  35. void loop() {
  36.  
  37.   // Si hay datos disponibles en el puerto serial
  38.   if (Serial.available() > 0)
  39.   {  
  40.     // Leer la letra actual en el buffer
  41.     Letra = Serial.read();
  42.    
  43.     // aqui se condiciona si la letra enviada está entre las
  44.     // opciones y ejecuta el patron determinado
  45.    
  46.     if (Letra == 'A'){
  47.       Patron_A();
  48.     }
  49.     if (Letra == 'B'){
  50.       Patron_B();
  51.     }
  52.     if (Letra == 'C'){
  53.       Patron_C();
  54.     }
  55.     if (Letra == 'D'){
  56.       Patron_D();
  57.     }
  58.     if (Letra == 'E'){
  59.       Patron_E();
  60.     }
  61.     if (Letra == 'F'){
  62.       Patron_F();
  63.     }
  64.     if (Letra == 'G'){
  65.       Patron_G();
  66.     }
  67.     if (Letra == 'H'){
  68.       Patron_H();
  69.     }
  70.    
  71.     // el bucle se ejecuta mientras hayan datos disponibles
  72.     // por leer en el buffer.
  73.    
  74.   }
  75. }
  76.  
  77. // a continuacion y hasta el final de codigo estan las funciones
  78. // para mostrar los patrones en cada caso descrito arriba.
  79.  
  80. void Patron_A(){
  81.  
  82.   for (int j = 0; j < 17; j++) {
  83.     // carga la secuencia del arreglo determinado.
  84.     dato = P_A[j];
  85.     // funcion de envio
  86.     envio();
  87.     delay(100);
  88.   }
  89. }  
  90.  
  91. void Patron_B(){
  92.  
  93.   for (int j = 0; j < 16; j++) {
  94.     // carga la secuencia del arreglo determinado
  95.     dato = P_B[j];
  96.     envio();
  97.     delay(100);
  98.     }
  99. }  
  100.  
  101. void Patron_C(){
  102.  
  103.   for (int j = 0; j < 9; j++) {
  104.     // carga la secuencia del arreglo determinado
  105.     dato = P_C[j];
  106.     envio();
  107.     delay(200);
  108.     }
  109. }
  110.  
  111. void Patron_D(){
  112.  
  113.   for (int j = 0; j < 10; j++) {
  114.     // carga la secuencia del arreglo determinado
  115.     dato = P_D[j];
  116.     envio();
  117.     delay(200);
  118.     }
  119. }
  120.  
  121. void Patron_E(){
  122.  
  123.   for (int j = 0; j < 7; j++) {
  124.     // carga la secuencia del arreglo determinado
  125.     dato = P_E[j];
  126.     envio();
  127.     delay(200);
  128.     }
  129. }
  130.  
  131. void Patron_F(){
  132.  
  133.   for (int j = 0; j < 13; j++) {
  134.     // carga la secuencia del arreglo determinado
  135.     dato = P_F[j];
  136.     envio();
  137.     delay(100);
  138.    
  139.   }
  140. }  
  141.  
  142. void Patron_G(){
  143.  
  144.   for (int j = 0; j < 9; j++) {
  145.     // carga la secuencia del arreglo determinado
  146.     dato = P_G[j];
  147.     envio();
  148.     delay(300);
  149.    
  150.   }
  151. }  
  152.  
  153. void Patron_H(){
  154.   for (int j = 0; j < 9; j++) {
  155.     dato = P_H[j];
  156.     envio();
  157.     delay(300);
  158.   }
  159. }
  160.  
  161. void envio(){
  162.     // se pone el pin latch en cero para guardar el valor mientras se transmite.
  163.     digitalWrite(latchPin, 0);
  164.     //
  165.     shiftOut(dataPin, clockPin, MSBFIRST, dato);
  166.     // se regresa el pin latch a estado alto para esperar el nuevo valor
  167.     digitalWrite(latchPin, 1);
  168. }