jueves, 13 de octubre de 2016

LABORATORIO #4

DESCRIPCIÓN

Para esta practica se controlaran 8 leds desde el ARDUINO por medio de un integrado IC 74HC595, definiendo desde una interfaz gráfica que led debe estar encendido.

En processing 3 crearemos 8 botones los cuales al pulsarlos me definirán que led esta prendido o que led esta apagado, esta interfaz se comunica por el puerto serial.


MATERIALES DEL LABORATORIO 


Arduino UNO
1 Protoboard
8 Diodos LED's
8 Resistencias de 220 Ohmios
Cable UTP
1 integrado IC 74HC595


MATERIALES DEL LABORATORIO 


DIAGRAMAS

PROTOBOARD




FOTOS MATERIALES Y MONTAJE





























CÓDIGO
ARDUINO

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

PROCESSING

  1. //laboratorio 4
  2. import controlP5.*;
  3. import processing.serial.*;
  4. // se definen los objetos usados
  5. ControlP5 cp5;
  6. Serial serial;
  7. // variables
  8. int myColor = color(255);
  9. int c1, c2;
  10. String letra;
  11. int [] Clr = {
  12.   255255255
  13. };
  14. float n, n1;
  15. // Solo se ejecuta una vez, al iniciar el Sketch
  16. void setup() {
  17.   size(200350); // tamaño de la ventana
  18.   noStroke();    // no dibujar el border de los rectángulos
  19.   // crear el objeto ControlP5 y cada boton
  20.   cp5 = new ControlP5(this);
  21.   cp5.addButton("MovA")
  22.     .setValue(0)
  23.       .setPosition(5050)
  24.         .setSize(10025)
  25.           ;
  26.   cp5.addButton("MovB")
  27.     .setValue(100)
  28.       .setPosition(5080)
  29.         .setSize(10025)
  30.           ;
  31.   cp5.addButton("MovC")
  32.     .setValue(0)
  33.       .setPosition(50110)
  34.         .setSize(10025)
  35.           ;
  36.   cp5.addButton("MovD")
  37.     .setValue(0)
  38.       .setPosition(50140)
  39.         .setSize(10025)
  40.           ;
  41.   cp5.addButton("MovE")
  42.     .setValue(0)
  43.       .setPosition(50170)
  44.         .setSize(10025)
  45.           ;  
  46.   cp5.addButton("MovF")
  47.     .setValue(0)
  48.       .setPosition(50200)
  49.         .setSize(10025)
  50.           ;  
  51.   cp5.addButton("MovG")
  52.     .setValue(0)
  53.       .setPosition(50230)
  54.         .setSize(10025)
  55.           ;  
  56.   cp5.addButton("MovH")
  57.     .setValue(0)
  58.       .setPosition(50260)
  59.         .setSize(10025)
  60.           ;      
  61.   // Creamos el objeto del puerto Serial
  62.   serial = new Serial(this, Serial.list()[0]9600);
  63. }
  64. void draw() {
  65.   // se dibuja el color de fondo de acuerdo
  66.   // al boton pulsado
  67.   background(myColor);
  68.   myColor = lerpColor(c1, c2, n);
  69.   n += (1-n)* 0.05;
  70. }
  71. public void controlEvent(ControlEvent evento) {
  72.   // guardar el nombre y valor del evento
  73.   n = 0;
  74.   String nombre = evento.getController().getName();
  75.   // dependiendo del nombre del evento se carga una letra a
  76.   // la variable del mismo nombre y se guarda un color para cada uno
  77.   if (nombre == "MovA") {
  78.     letra = "A";
  79.     Clr[0] = 200;
  80.     Clr[1] = 250;
  81.     Clr[2] = 255;
  82.   }
  83.   if (nombre == "MovB") {
  84.     letra = "B";
  85.     Clr[0] = 21;
  86.     Clr[1] = 156;
  87.     Clr[2] = 255;
  88.   }
  89.   if (nombre == "MovC") {
  90.     letra = "C";
  91.     Clr[0] = 236;
  92.     Clr[1] = 0;
  93.     Clr[2] = 21;
  94.   }
  95.   if (nombre == "MovD") {
  96.     letra = "D";
  97.     Clr[0] = 1;
  98.     Clr[1] = 56;
  99.     Clr[2] = 100;
  100.   }
  101.   if (nombre == "MovE") {
  102.     letra = "E";
  103.     Clr[0] = 100;
  104.     Clr[1] = 50;
  105.     Clr[2] = 200;
  106.   }
  107.   if (nombre == "MovF") {
  108.     letra = "F";
  109.     Clr[0] = 25;
  110.     Clr[1] = 225;
  111.     Clr[2] = 150;
  112.   }
  113.   if (nombre == "MovG") {
  114.     letra = "G";
  115.     Clr[0] = 230;
  116.     Clr[1] = 200;
  117.     Clr[2] = 200;
  118.   }
  119.   if (nombre == "MovH") {
  120.     letra = "H";
  121.     Clr[0] = 100;
  122.     Clr[1] = 100;
  123.     Clr[2] = 100;
  124.   }
  125.   c1 = c2;
  126.   c2 = color(Clr[0], Clr[1], Clr[2]);
  127.   println(letra);
  128.   serial.write(letra);
  129. }


No hay comentarios.:

Publicar un comentario