DESCRIPCIÓN
Enviar desde una interfaz en Processing un mensaje a una matriz LED 8x8 (desplazándose de izquierda a derecha) a través de IC MAX7219.
MATERIALES DEL LABORATORIO
-Computador con el IDE de Arduino y el driver de nuestra placa
- Arduino Uno- Protoboard
- Matriz LED MAX7219
- Cables Macho - Macho
MATERIALES DEL LABORATORIO
DIAGRAMAS
PROTOBOARD
CÓDIGO
ARDUINO
- /*
- ********** Arduino **********
- */
- #include <LedControl.h>
- //array matrix que contiene la informacion para pintar los caracteres validos en la matrix led
- byte letras [][5] = {{B01111100, B00010010, B00010001, B00010010, B01111100},//A
- {B01000001, B01111111, B01001001, B01001001, B00110110},//B
- {B00111110, B01000001, B01000001, B01000001, B00100010},//C
- {B01000001, B01111111, B01000001, B01000001, B00111110},//D
- {B01111111, B01001001, B01001001, B01001001, B01000001},//E
- {B01111111, B00001001, B00001001, B00000001, B00000001},//F
- {B00111110, B01000001, B01001001, B01001001, B00111010},//G
- {B01111111, B00001000, B00001000, B00001000, B01111111},//H
- {B01000001, B01000001, B01111111, B01000001, B01000001},//I
- {B00100000, B01000000, B01000000, B00111111, B00000001},//J
- {B01111111, B00001000, B00010100, B00100010, B01000001},//K
- {B01111111, B01000000, B01000000, B01000000, B01000000},//L
- {B01111111, B00000010, B00000100, B00000010, B01111111},//M
- {B01111111, B00000010, B00000100, B00001000, B01111111},//N
- {B01111110, B00000101, B00001001, B00010001, B01111110},//Ñ
- {B00111110, B01000001, B01000001, B01000001, B00111110},//O
- {B01111111, B00001001, B00001001, B00001001, B00000110},//P
- {B00111110, B01000001, B01010001, B00100001, B01011110},//Q
- {B01111111, B00001001, B00011001, B00101001, B01000110},//R
- {B00100110, B01001001, B01001001, B01001001, B00110010},//S
- {B00000001, B00000001, B01111111, B00000001, B00000001},//T
- {B00111111, B01000000, B01000000, B01000000, B00111111},//U
- {B00000111, B00011000, B01100000, B00011000, B00000111},//V
- {B01111111, B00100000, B00011000, B00100000, B01111111},//W
- {B01100011, B00010100, B00001000, B00010100, B01100011},//X
- {B00000111, B00001000, B01110000, B00001000, B00000111},//Y
- {B01000001, B01100001, B01010001, B01001001, B01000111},//Z
- {0x00, 0x82, 0xff, 0x80, 0x00},//1
- {0xc2, 0xa1, 0x91, 0x89, 0x86},//2
- {0x81, 0x81, 0x85, 0x8b, 0x71},//3
- {0x18, 0x14, 0x12, 0xff, 0x00},//4
- {0x8f, 0x89, 0x89, 0x89, 0x71},//5
- {0x7c, 0x8a, 0x89, 0x89, 0x70},//6
- {0x01, 0xf1, 0x09, 0x05, 0x03},//7
- {0x76, 0x89, 0x89, 0x89, 0x76},//8
- {0x06, 0x89, 0x89, 0x89, 0x7e },//9
- {B01111110, B11100001, B10011001, B10000111, B01111110}//O
- };
- //------------------------------------------------------------------------------------------------
- //Se inicializa la varialbe que controla la matrix led
- LedControl matrix = LedControl(12,11,10,1);
- //variable que tendra la palabra a mostrar
- String palabra = "";
- //array que contiene los caracteres valido a mostrar
- char caracteres [] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
- 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
- void setup() {
- // put your setup code here, to run once:
- //se inicializa el puerto serial
- Serial.begin(9600);
- //se enciende los leds
- matrix.shutdown(0, false);
- //se asigna la intencidad de los leds
- matrix.setIntensity(0, 1);
- //se borra cualquier cosa que haya estado pintada previamente
- matrix.clearDisplay(0);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- obtenerCaracter();
- }
- //metodo que lee las palabras enviadas por el serial
- void obtenerCaracter(){
- //se valida si hay informacion en el Serial
- if(Serial.available()){
- //se lee toda la cada de caracteres enviada
- palabra = Serial.readString();
- }
- for(int i = 0; i < palabra.length(); i++){
- for(int j = 0; j < sizeof(caracteres); j++){
- //se lee cada caracter y se valida para su impresion en la matrix led
- if(palabra.charAt(i) == caracteres[j]){
- imprimirCaracter(letras[j]);
- }
- }
- }
- }
- //metodo que imprime la matrix led el caracter enviado por parametro
- void imprimirCaracter(byte elemento[]){
- for(int j = 8; j > -8; j--){
- for(int i = 0; i < 5; i++){
- //se encienden los led que corresponde al caracter solicitado
- //moviendolo de izquierda a derecha
- matrix.setRow(0, j+i, elemento[i]);
- delay(15);
- //se apagan los led's de la fila anterior
- //para generar el efecto de movimiento
- matrix.setRow(0, j+6, 0x00);
- }
- }
- }
PROCESSING
- /*
- ********** Arduino **********
- */
- import controlP5.*;
- import processing.serial.*;
- Serial puerto;
- ControlP5 ventana;
- String alerta = "";
- //Array con los caracteres validos
- char caracteres [] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
- 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', ' '};
- void setup(){
- //variable que se usa para configurar el campo de texto
- PFont fuente = createFont("arial", 25);
- //se define el tamaño de la ventana
- size(500, 300);
- //se valida si es posible crear una instancia del puerto serial
- //y configura la variable que controlara el puerto
- try{
- //String portName = Serial.list()[0];
- String portName = Serial.list()[1];
- puerto = new Serial(this, portName, 9600);
- }
- catch(Exception e){
- //si hay un error se muestra una lista de los puertos disponibles
- //println(Serial.list());
- //printArray(Serial.list());
- }
- //se inicliza la variable acargo del contenido de la ventana
- ventana = new ControlP5(this);
- //se agrega un campo de texto
- ventana.addTextfield("", 50, 25, 400, 40)
- .setColor(color(255))
- .setFont(fuente)
- .setFocus(true);
- //se define la fuente para los mensajes de la ventana
- textFont(fuente);
- }
- void draw(){
- //se asigna un color de fondo negro
- background(147);
- //se muestra un texto de alerta (si hay alguna)
- fill(255,0,4);
- text(alerta, 50, 180);
- fill(255);
- text("Digite la palabra o la cadena de\npalabras sin espacios",50,100);
- }
- void controlEvent(ControlEvent e){
- //se obtiene el valor del campo de texto
- String palabra = e.getStringValue();
- //se valida que el evento se haya detonado por un elemento
- //de la ventana
- if(e.isController()){
- //se verifica que la palabra no tenga ningun caracter invalido
- if(validarPalabra(palabra)){
- //se envia la palabra en minusculas por el puerto serial
- puerto.write(palabra.toLowerCase());
- //se borra el mensaje de alerta (si lo hay)
- alerta = "Envió: '"+palabra+"'";
- }
- else{
- //se muestra el mensaje de alerta con la palabra invalida
- alerta = "'" + palabra + "' \nNo es un válido\nRevise si los caracteres son validos.";
- }
- }
- }
- //metodo que se encarga de validar la palabra digitada
- boolean validarPalabra(String palabra){
- //variable que cuenta la cantidad de caracteres validos
- int validacion = 0;
- //se eliminan los espacios al inicio y al fin de la palabra Y se combierte a minuscula
- palabra = palabra.trim().toLowerCase();
- //se recorre la palabra digitada caracter por caracter
- for(int i = 0; i < palabra.length(); i++){
- //se recorre el array de caracteres validos
- for(int j = 0; j < caracteres.length; j++){
- //se valida un caracter de la palabra digitada es igual a un caracter valido
- if(palabra.charAt(i) == caracteres[j]){
- //se cuenta un caracter valido
- validacion++;
- }
- //se valida si hay espacios vacios dentro de la palabra digitada
- if(palabra.charAt(i) == ' ')
- validacion++;
- }
- }
- print(validacion);
- print("-");
- println(palabra.length());
- //se valida si la cantidad de caracteres validos es igual a la cantidad
- //de caracteres de la palabra digitada
- if(validacion != palabra.length())
- return false;
- else
- return true;
- }
No hay comentarios.:
Publicar un comentario