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
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
1 Protoboard
8 Diodos LED's
8 Resistencias de 220 Ohmios
Cable UTP
1 integrado IC 74HC595
MATERIALES DEL LABORATORIO
DIAGRAMAS
PROTOBOARD
CÓDIGO
ARDUINO
- //laboratorio 4
- // se inicializan los pines para en envio de los datos
- // al integrado
- int latchPin = 8;
- int clockPin = 9;
- int dataPin = 7;
- // se inicializan los arreglos para cada patrón
- int dato;
- int P_A[17] = {0, 1, 3, 7, 15, 31, 63, 127, 255, 127, 63,31, 15, 7, 3, 1, 0};
- int P_B[16] = {0, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8,4, 2, 1, 0};
- int P_C[9] = {0, 129, 66, 36, 24, 36, 66, 129, 0 };
- int P_D[10] = {0, 1, 5, 21, 85, 213, 245, 253, 255, 0};
- int P_E[7] = {0, 255, 189, 165, 161, 129, 0};
- int P_F[13] = {0, 1, 129, 131, 195, 199, 231, 239, 255, 231,195, 129, 0};
- int P_G[9] = {0, 3, 15, 63, 255, 243, 240, 192, 0};
- int P_H[9] = {0, 240, 255, 15, 255, 15, 255, 240, 0 };
- // variable para la lectura del dato serial desde processing
- char Letra;
- // config del programa
- void setup() {
- // se configuran los pines como salidas y el modulo de com serial
- pinMode(latchPin, OUTPUT);
- pinMode(dataPin, OUTPUT);
- pinMode(clockPin, OUTPUT);
- Serial.begin(9600);
- }
- // Bucle de ejecución del programa
- void loop() {
- // Si hay datos disponibles en el puerto serial
- if (Serial.available() > 0)
- {
- // Leer la letra actual en el buffer
- Letra = Serial.read();
- // aqui se condiciona si la letra enviada está entre las
- // opciones y ejecuta el patron determinado
- if (Letra == 'A'){
- Patron_A();
- }
- if (Letra == 'B'){
- Patron_B();
- }
- if (Letra == 'C'){
- Patron_C();
- }
- if (Letra == 'D'){
- Patron_D();
- }
- if (Letra == 'E'){
- Patron_E();
- }
- if (Letra == 'F'){
- Patron_F();
- }
- if (Letra == 'G'){
- Patron_G();
- }
- if (Letra == 'H'){
- Patron_H();
- }
- // el bucle se ejecuta mientras hayan datos disponibles
- // por leer en el buffer.
- }
- }
- // a continuacion y hasta el final de codigo estan las funciones
- // para mostrar los patrones en cada caso descrito arriba.
- void Patron_A(){
- for (int j = 0; j < 17; j++) {
- // carga la secuencia del arreglo determinado.
- dato = P_A[j];
- // funcion de envio
- envio();
- delay(100);
- }
- }
- void Patron_B(){
- for (int j = 0; j < 16; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_B[j];
- envio();
- delay(100);
- }
- }
- void Patron_C(){
- for (int j = 0; j < 9; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_C[j];
- envio();
- delay(200);
- }
- }
- void Patron_D(){
- for (int j = 0; j < 10; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_D[j];
- envio();
- delay(200);
- }
- }
- void Patron_E(){
- for (int j = 0; j < 7; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_E[j];
- envio();
- delay(200);
- }
- }
- void Patron_F(){
- for (int j = 0; j < 13; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_F[j];
- envio();
- delay(100);
- }
- }
- void Patron_G(){
- for (int j = 0; j < 9; j++) {
- // carga la secuencia del arreglo determinado
- dato = P_G[j];
- envio();
- delay(300);
- }
- }
- void Patron_H(){
- for (int j = 0; j < 9; j++) {
- dato = P_H[j];
- envio();
- delay(300);
- }
- }
- void envio(){
- // se pone el pin latch en cero para guardar el valor mientras se transmite.
- digitalWrite(latchPin, 0);
- //
- shiftOut(dataPin, clockPin, MSBFIRST, dato);
- // se regresa el pin latch a estado alto para esperar el nuevo valor
- digitalWrite(latchPin, 1);
- }
PROCESSING
- //laboratorio 4
- import controlP5.*;
- import processing.serial.*;
- // se definen los objetos usados
- ControlP5 cp5;
- Serial serial;
- // variables
- int myColor = color(255);
- int c1, c2;
- String letra;
- int [] Clr = {
- 255, 255, 255
- };
- float n, n1;
- // Solo se ejecuta una vez, al iniciar el Sketch
- void setup() {
- size(200, 350); // tamaño de la ventana
- noStroke(); // no dibujar el border de los rectángulos
- // crear el objeto ControlP5 y cada boton
- cp5 = new ControlP5(this);
- cp5.addButton("MovA")
- .setValue(0)
- .setPosition(50, 50)
- .setSize(100, 25)
- ;
- cp5.addButton("MovB")
- .setValue(100)
- .setPosition(50, 80)
- .setSize(100, 25)
- ;
- cp5.addButton("MovC")
- .setValue(0)
- .setPosition(50, 110)
- .setSize(100, 25)
- ;
- cp5.addButton("MovD")
- .setValue(0)
- .setPosition(50, 140)
- .setSize(100, 25)
- ;
- cp5.addButton("MovE")
- .setValue(0)
- .setPosition(50, 170)
- .setSize(100, 25)
- ;
- cp5.addButton("MovF")
- .setValue(0)
- .setPosition(50, 200)
- .setSize(100, 25)
- ;
- cp5.addButton("MovG")
- .setValue(0)
- .setPosition(50, 230)
- .setSize(100, 25)
- ;
- cp5.addButton("MovH")
- .setValue(0)
- .setPosition(50, 260)
- .setSize(100, 25)
- ;
- // Creamos el objeto del puerto Serial
- serial = new Serial(this, Serial.list()[0], 9600);
- }
- void draw() {
- // se dibuja el color de fondo de acuerdo
- // al boton pulsado
- background(myColor);
- myColor = lerpColor(c1, c2, n);
- n += (1-n)* 0.05;
- }
- public void controlEvent(ControlEvent evento) {
- // guardar el nombre y valor del evento
- n = 0;
- String nombre = evento.getController().getName();
- // dependiendo del nombre del evento se carga una letra a
- // la variable del mismo nombre y se guarda un color para cada uno
- if (nombre == "MovA") {
- letra = "A";
- Clr[0] = 200;
- Clr[1] = 250;
- Clr[2] = 255;
- }
- if (nombre == "MovB") {
- letra = "B";
- Clr[0] = 21;
- Clr[1] = 156;
- Clr[2] = 255;
- }
- if (nombre == "MovC") {
- letra = "C";
- Clr[0] = 236;
- Clr[1] = 0;
- Clr[2] = 21;
- }
- if (nombre == "MovD") {
- letra = "D";
- Clr[0] = 1;
- Clr[1] = 56;
- Clr[2] = 100;
- }
- if (nombre == "MovE") {
- letra = "E";
- Clr[0] = 100;
- Clr[1] = 50;
- Clr[2] = 200;
- }
- if (nombre == "MovF") {
- letra = "F";
- Clr[0] = 25;
- Clr[1] = 225;
- Clr[2] = 150;
- }
- if (nombre == "MovG") {
- letra = "G";
- Clr[0] = 230;
- Clr[1] = 200;
- Clr[2] = 200;
- }
- if (nombre == "MovH") {
- letra = "H";
- Clr[0] = 100;
- Clr[1] = 100;
- Clr[2] = 100;
- }
- c1 = c2;
- c2 = color(Clr[0], Clr[1], Clr[2]);
- println(letra);
- serial.write(letra);
- }
No hay comentarios.:
Publicar un comentario