sábado, 14 de septiembre de 2013

Trompeta con Processing, Arduino, Midi Yoke y LMMS

SAXOFÓN EN PROCESSING

SAXOFÓN EN PROCESSING

Armando Camacho

1Ingeniería Electrónica, 
Facultad de Ingeniería
Universidad del Magdalena





Para este proyecto, se desea es realizar de manera muy sencilla  la creación de una interfaz capaz de simular un instrumento musical, para este caso el saxofón, para ello se utilizará el software Processing 2.0 el cual nos permite esto sin tener un amplio conocimiento sobre programación.
La primera parte a explicar es la ventana con la cual el usuario tendrá acceso:

En esta podemos ver las diferentes notas naturales expresadas en el saxofón. Además observamos el instrumento y las variaciones de las notas con respecto al teclado, es decir, la interacción se produce por el teclado del computador cuando se utiliza una de las teclas estipuladas en el código esta genera una nota musical la cual es visible por el usuario de la siguiente manera.
       



Generando una nota musical mientras se oprime la tecla indicada, esto con la finalidad de facilitar la interacción del usuario con el instrumento ya que físicamente este es muy complicado de utilizar por la gran cantidad de agujeros a manejar:



Una vez conocida la interfaz se procederá a la explicación del código utilizado en el software Processing 2.0.


En la primera pare del código podemos ver lo que es la declaración de variables enteras y booleanas también se logra apreciar la declaración de la librería Maxim_Java_api mediante Maxim Maxim; y la declaración de  Do, Re, Mi, Fa… etc como variables para almacenamiento del audio y Pfont para la aparición de fuente por encima de la imagen.


En segunda instancia nos encontramos con el void setup(); en el cual declararemos mediante la función size el tamaño de la ventana que verá el usuario. Img es una variable utilizada para cargar la imagen de fondo, background se utiliza para realizar un relleno grisáceo el cual estará por debajo de la imagen de fondo. Mediante Font cargamos una fuente la cual creamos nosotros mismos desde el mismo processing de la siguiente manera:







 Una vez realizado este procedimiento se selecciona la fuente actual y se carga Do, Re, Mi,… etc. Con los archivos de audio correspondientes para así acabar con el void setup();


Para esta parte lo que se desea es comenzar a dibujar o a imprimir lo que uno quiere que el usuario vea. Mediante la función println se imprimen las coordenadas del mouse para ser visualizadas por el programador para así tener un buen sentido de orientación en la ventana del usuario

Luego se imprimen las notas con la función text la cual nos permite incluir cualquier palabra con su ubicación por encima de la imagen. Y ellipse que es una función como su nombre lo indica para creación de este tipo de forma que le permitirá al usuario saber la noa que está tocando.

Para la siguiente pare del void draw(); se coloca la una condición que nos asegurará que cuando no se pulse ninguna letra las notas se detengan y se repitan para que cuando sean pulsadas arranquen desde cero. Este procedimiento se hace ara cada una de ellas, Y se imprimen como se mostró anteriormente otra vez los círculos.

Luego se preguntará por la letra pulsada y dependiendo del tipo de letra se pondrá a reproducir el sonido que está guardado en cada una de las variables de audio. Este paso se realiza para cada una de las notas musicales que se van a tratar, es decir para las naturales.


Arpa electronica PROCESSING+ARDUINO

Arpa Electrónica En Processing y Arduino
Pomares Hernández Hugo Alberto
Ingeniería Electrónica,
Facultad de Ingeniería
Universidad del Magdalena



Resumen— En el siguiente informe se muestra el uso adecuado de processing, un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en java, además del uso de este para la realización de interfaz gráfica para la  producción de proyectos multimedia e interactivos de diseño digital.
Otros de los puntos importantes de este escrito es principalmente la realización de un arpa electrónica con el fin de tener una herramienta virtual en la cual se puede interactuar con el instrumento sin necesidad de tenerlo físicamente como tal y así aprender tener habilidades y destrezas en la herramienta musical.
Además explicar detalladamente como se lleva a cabo la realización con sus respectivos códigos de este instrumento musical.

Palabras Claves—processing, arpa, multimedia, instrumento.

Abstract— The following report shows the proper use of processing, a programming language and integrated development environment based on open source java, and use this to perform graphical interface for producing multimedia projects and interactive digital design.
Other important points of this paper is mainly conducting electronic harp in order to have a virtual tool in which you can interact with the instrument without physically having it as such and learn to have abilities and skills in the tool musical.
Spell addition is performed as the embodiment with the respective codes of the musical instrument.


Index Terms— processing, harp, multimedia, instrument.


I.     Introducción

En el siguiente documento se describe la realización de una interfaz gráfica de un instrumento musical conocido como el arpa aplicando los conocimientos de processing manejando un lenguaje de programación basado en java, la importancia de este propósito es que la interacción que hay con el usuario y la interfaz será de una manera fácil y dinámica en los cuales la persona tendrá una manera distinta de manejar un instrumento musical.

Uno de los principales factores de este informe es que se tenga claramente el uso debido de las diferentes sentencias para la creación de este proyecto y así tener una mayor contexto de la realización de futuras aplicaciones en esta fuente de lenguaje abierta de lenguaje de programación y entorno de desarrollo integrado.

Processing es una herramienta para no programadores la cual la hace más versátil a la hora de manejar.


II.    Marco teórico


El arpa es un instrumento de cuerda pulsada compuesto por un marco resonante y una serie variable de cuerdas tensadas entre la sección inferior y la superior. Las cuerdas pueden ser pulsadas con los dedos o con una púa o plectro. Además del arpa clásica, usada actualmente en las orquestas, existen otros tipos, como el arpa celta y el arpa paraguaya.
El arpa es el instrumento musical nacional de Irlanda, Paraguay y Perú.
Se puede dividir el arpa europea en dos modelos:
Arpa medieval, (de origen irlandés), también conocida como arpa bárdica. No superior a los 75 cm de altura y de afinación diatónica, cuerdas metálicas, ornamentalmente rica en tallas, dibujos e incrustaciones de metal. En la actualidad aún se tienen dos ejemplos claros, uno es el arpa del rey Brian Boru (muerto en 1014) que se puede encontrar en el Museo de Dublín, y otra es el arpa de la reina Mary de escocia, en el Museo Nacional de Edimburgo.
Arpa celta (de origen galés), puede tener hasta 105 cm de altura, 34 cuerdas y con la posibilidad de incorporar sistemas de semitonos.
Ambas tienen el pilar curvado y su caja de resonancia se ensanchaba en las cuerdas graves
El arpa medieval era diatónica, y el arpa moderna, por el contrario, nació con los primeros intentos de cromatismo que la evolución de la música occidental exigía. Los primeros intentos surgieron de los talleres de luthiers irlandeses en el siglo XVI, que proveyeron al arpa de una doble fila de cuerdas. En el siglo XVII se incorpora una tercera fila, la 1ª la 3ª fila eran diatónicas (29 cuerdas cada fila) mientras que la 2ª fila, con 20 cuerdas, estaba reservada para los semitonos.
A mediados del XVII unos constructores tiroleses inventaron el arpa de ganchos, con los cuales era posible estirar la cuerda y subirla un semitono. En esta época fueron muchos los mecanismos incorporados para subir el tono, pero todos accionados manualmente, por lo que debían hacerse antes de empezar la interpretación.
A finales del siglo XVII, lutier bávaro fabricó la primera arpa con pedales que situados a ambos lados del soporte del instrumento, estaban unidos a los ganchos fijos de la consola mediante un sistema de transmisión. Eran siete los pedales, correspondientes a los siete grados de la escala musical y para cuyo instrumento Mozart escribió su Concierto para flauta y arpa en 1778. A raíz del descubrimiento se inspiraron numerosas ideas a cual más estrafalarias para ampliar las posibilidades del arpa (como fue la colocación de doble número de pedales y sordinas), pero el mayor éxito lo obtuvo S. Erard en 1811. Erard presentó el modelo llamado de «doble acción» que, con ligeras modificaciones posteriores, es la que se usa normalmente en la actualidad.
El arpa se usa ampliamente en la música académica, normalmente para efectos como el glisando o los arpegios. En la ópera italiana y alemana se usa para arias románticas y bailes, como el «Vals de Musetta» en La bohème.  Compositores franceses como Claude Debussy y Maurice Ravel compusieron conciertos para arpa y música de cámara que se siguen interpretando. Durante el siglo XIX, el compositor y arpista francés Nicolas Bochsa compuso cientos de piezas de todo tipo (transcripciones de ópera, música de cámara, conciertos, óperas, métodos para el arpa).
Los arpistas del siglo XX Henriette Renié y Marcel Grandjany compusieron muchos solos y piezas de cámara que figuran en el repertorio de arpa. Los compositores modernos utilizan el arpa con frecuencia porque los pedales de un arpa de concierto permiten toda clase de escalas y sonidos con efectos, aunque algunas piezas modernas requieren mucho uso del pedal.
Processing es un lenguaje de programación de código abierto y el medio ambiente para las personas que quieren programar imágenes, animaciones y sonido. Es utilizado por estudiantes, artistas, diseñadores, arquitectos, investigadores y aficionados para el aprendizaje, creación de prototipos y producción. Se creó para enseñar a los fundamentos de la programación informática dentro de un contexto visual y para servir como un cuaderno de bocetos de software y la herramienta de producción profesional. Processing es desarrollado por artistas y diseñadores como una alternativa a las herramientas de software propietario en el mismo dominio.
La Interfaz de Processing es sencilla. Esto permite que uno pueda familiarizarse con ella muy rápidamente. Si la comparamos con la complejidad de interfaces como las de Flash o Director, la diferencia es muy considerable.
Cuando creamos un proyecto nuevo en Processing, creamos un Sketch, y el Sketch folder es la carpeta donde éste se guarda. En principio, el Sketch consta tan solo de la misma carpeta y de un archivo .pde que contiene el código. Luego se pueden añadir carpetas para archivos de imagen, video, etc.

RUN: Sirve para ejecutar el código. Con la mágia de este simple botón nos ahorramos lo que en programación se conoce como compilación.
STOP: Para el programa
NEW: Crea un Sketch nuevo
OPEN: Abre un Sketch existente
SAVE: Guarda el Sketch con el que se está trabajando. Hay que utilizarlo mucho, por si acaso, pero aún más utilizar el "Save as" (ctrl+shift+s) para ir guardando versiones mientras trabajamos en nuestros proyectos.
EXPORT: Sirve para preparar el sketch para ser ejecutado a través de un navegador, ya sea en la web o simplemente fuera del entorno Processing.
Tan sólo conociendo estos botones de la interfaz (y el siempre útil “save as”) tenemos bastante como para empezar a trabajar con Processing, y posiblemente no necesitemos nada más durante estas primeras sesiones.


III.     Montaje experimental

 A continuación se mostraran los pasos realizados para la realización de este proyecto:

En la siguiente parte del código (Figura.1) se refleja la declaración de las variable deck1x y deck1y que son las coordenadas donde estará ubicada la imagen de la interfaz, luego se declara como booleano deck1Playing se coloca false para no generar un ciclo infinito en la reproducción del audio, después colocamos como entero una variable a la que le vamos a asignar un ancho respectivo para la imagen, declaramos el nombre de la variable en la cual vamos a cargar la imagen, importamos la librería MaximJava como se ve en la quinta línea “Maxim maxim”, que es una librería encargada de la producción de sonidos .wav. y al finalizar declaramos las variables con en las cuales va a ir cargado el sonido.












Figura.1

En la (Figura.2) void setup sirve para definir el tamaño de la ventana, el sonido y la imagen de nuestra interfaz gráfica. Size sirve para colocarle el tamaño a la ventana de la aplicación. image Mode sirve para elegir el centro de la imagen, con load image que es una librería que sirve para el procesamiento de imágenes lo que se hace es cargar la imagen en este caso “arpa2.png, maxim.loadFile lo que hace es asignar el sonido para que se reproduzca y setlooping es para hacer que el ciclo del sonido sea o no repetitivo, si se coloca  “true” se repite el tono una y otra vez si se coloca “false” suena el tono, termina y no se repite.













Figura.2

En la (Figura.3) se utiliza el background para colocar un fondo a la interfaz en este caso 255 que se refiere al color blanco y el .volume se utiliza para aumentar de volumen el tono.



 Figura.3

En la (Figura.4) el void draw sirve para ajustar la imagen en la ventana de la interfaz, con el background se elige el color de fondo, en imageMode elijo el centrado de la imagen, en deck1x y deck1y arreglo las coordenadas en las cuales quiero que este ubicada la imagen y el println sirve para que al momento de que se pase el mouse por medio de la imagen me refleje las coordenadas, y así sea más fácil trabajar.







Figura.4

En la (Figura.5) el voida mousedDragged sirve para que cuando el mouse este sostenido y pase por la coordenada de la imagen reproduce el tono, el if sirve para preguntar que cuando este en esa parte del codigo en el eje de las x y en el eje de las y, se represente el tono.

















Figura.5

En la (Figura.6) se observa como queda la intefaz grafica la cual se ejecuta presionando la tecla

"play" y para detener la aplicación se presiona el boton"stop".














para la utilizacion de arduino insertamos en processing la libreria de arduino como se muestra en la (Figura.7) 

Figura.7

para inicializar los pines en arduino se hace se la siguiente manera en la (Figura.8)

Figura.8

se debe usar en la sentencia del if la palabra "arduino.digitalRead(pin2)==Arduino.HIGH" así como se ve en la siguiente figura (Figura.9).

Figura.9

se colocan los pones del programa como entradas (Figura.10).

Figura.10

ANEXOS

EN LA SIGUIENTE IMAGEN SE MUESTRA LA IMPLEMENTACIÓN DEL PROCESSING+ARDUINO.



REFERENCIA

Timables (arduino-processing)


Objetivo: Realizar una interfaz grafica que permita emular los timbales como instrumento muscial y conjuntamente se realize la comunicacion directa con arduino.

Inicialmente no se necesitan conocimientos previos del sofware processing ya que al transcurrir del desarrollo del proyecto y con un poco de investigación se lograran aclarar dudas ya que este sofware es libre y permite realizar aportes y correciones del mismo si se logra captar alguna, al ser gratuito da muchas ventajas porque permite tomar codigos ya realizados y utilizarlos para el desarrollo del proyecto a realizar, de manera ilutrastiva se muestran las interfaces graficas que manejan arduino y processing.




 El desarrollo del proyecto se baso principalmente en la comunicacion de arduino- processing ya que es el objetivo principal de la practica a continuación el codigo generado:

//comunicacion serial arduino processing
import processing.serial.*;  // se importa la libreria de processing para comunicacion serial
import cc.arduino.*;  // se importa la libreria de arduiono para processing
Arduino arduino;
int Pin1= 12; // se declaran variables para asignar los puertos del arduino
int Pin= 13;
//int Pin2= 11;
//int Pin3= 10;
//int Pin4= 9;
//final configuracion comunicacion serial
Maxim maxim; // se carga la libreria Maxim para reproducir audios
AudioPlayer player1; // se declaran las variables para asignar el audio requerido
AudioPlayer player;
AudioPlayer player2;
AudioPlayer player3;
AudioPlayer player4;
AudioPlayer player5;
AudioPlayer player6;
AudioPlayer player7;
AudioPlayer player8;

PImage Stivenson; // se carga la imagen por medio de la variable stivenson
int x;

void setup()
{
       println(Arduino.list()); // imprime la lista de los puertos com
       arduino = new Arduino(this, Arduino.list()[1], 57600); // se escoge la lista de los puertos com reconocidos por processing y la velicidad de transmisión
         arduino.pinMode (Pin, Arduino.INPUT); // se declaran los puertos del arduino como entrada
           arduino.pinMode (Pin1, Arduino.INPUT);
   //           arduino.pinMode (Pin2, Arduino.INPUT);
     //            arduino.pinMode (Pin3, Arduino.INPUT);
       //           arduino.pinMode (Pin4, Arduino.INPUT);
      
  size(800,600); // de cargan los pixeles de la pizarra preferiblemente los pixeles de la imagen
   Stivenson= loadImage("timbales.jpg");
     maxim= new Maxim(this);
     /// cargar sonidos altos de los timables
      player= maxim.loadFile("Timbale1.wav");
        player1= maxim.loadFile("Timbale2.wav");
          player2= maxim.loadFile("Timbale3.wav");
            player3= maxim.loadFile("Timbale4.wav");
               player4= maxim.loadFile("Timbale5.wav");
                 player5= maxim.loadFile("Timbale6.wav");
                   player6= maxim.loadFile("Timbale7.wav");       
                     player7= maxim.loadFile("Timbale8.wav");
                       player8= maxim.loadFile("Timbale9.wav");
      
        player.setLooping(true);
         player1.setLooping(true);
           player2.setLooping(true);
             player3.setLooping(true);
               player4.setLooping(true);
                 player5.setLooping(true);
                   player6.setLooping(true);
                      player7.setLooping(true);
                         player8.setLooping(true);   
                     
         }
void draw()   {
      background(Stivenson);
        println(  pmouseX);// imprime la posicion  en x del mouse si se llega a utilizar
          println( pmouseY);
           if (arduino.digitalRead(Pin)==Arduino.HIGH){// de esta manera se pregunta por el estado del pin del arduino y se realizan los condicionales necesarios.
             ellipse(160, 107, 75, 55);
         player8.play(); }
          else{
        player8.stop();}  
         
          if (arduino.digitalRead(Pin1)==Arduino.HIGH){
             ellipse(350, 107, 75, 55);
         player4.play(); }
          else{
        player4.stop();}
}  


nota: la libreria maxim solo recibe audios .wav, se bede cargar la libreria de arduino para processing ya que si no se realiza este paso generara errores al compilar el codigo.
 se puede concluir que la experiencia fue importante ya genero errores que fueron solucionados a tiempo como la libreria que generaba errores  al establecer la comunicacion con el arduino y los .wav que recibe la libreria maxim.

CONGAS (PROCESSING - ARDUINO)





 CONGAS (Processing -  Arduino)



El objetivo principal de este documento es dar una breve explicacion sobre como desarrollar una interfaz grafica que emule un instrumento musical por medio del sofware Processing y a su ves que este se complemente con Arduino logrando que exista interaccion del ser humano con el proyecto adesarrollar.

Para el desarrollo de esta experiencia no es necesario saber cual es funcionamiento exacto del instrumento, por ello los sonidos necesitados se extraen de la web, cabe aclarar (no todas las librerias de processing admiten todos las de audio), luego de adquirir los archivos necesarios en este caso estos con extension .wav ya que se trabaja con la libreria Maxim Yava cuya caracteristica principal es que solo acepta archivos con dicha extensión, la interfaz grafica a utilizar es basicamente una imagen que se carga por el sofware Processing.

Incialmente se realiza la programacion en el sofware processing para adquirir experiencias con el mismo a continuacion se carga el codigo y explicación del mismo:




Imagen de Sofware Processing

// se cargan librerias y se asignan variables
Maxim maxim; 
AudioPlayer player;
PImage Mai;
// libreria Maxim java, la variable player que guardara el sonido y PImage carga la imagen a la variable Mai


//
void setup()
{  size(512,307);    // se definen los pixeles preferiblemente los de la imagen a utilizar
   Mai= loadImage("conga.jpg"); // se carga la imagen .jpg a la variable Mai
     maxim= new Maxim(this); 
       player= maxim.loadFile("mykbeat.wav"); // se carga el sonido a la variable player
         player.setLooping(true); }
//
void draw()   {
      background(Mai); // se dibuja la imagen por medio de la variable Mai
        println(  pmouseX);
          println( pmouseY);}  //estas dos instrucciones sirven para visualizar en el panel inferior la posicision en (x) e (y)

void mousePressed(){ // en este punto se ejecutan todas las condiciones requeridad o condicionadas por el mouse

 player.cue(0);
 if (mouseX >=130 && mouseX <=190 && mouseY>=90 && mouseY<=125 ) { // en este condicional se pregunta por las posiciones en x e y del mouse dependiendo de estas se dibujas una elipse y se reproduce el sonido
      ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}  }
 if (mouseX >=100 && mouseX <=120 && mouseY>=60 && mouseY<=148 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();} 
 if (mouseX >=121 && mouseX <=195 && mouseY>=135 && mouseY<=162 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();} }
if (mouseX >=196 && mouseX <=220 && mouseY>=60 && mouseY<=148 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}}
if (mouseX >=121 && mouseX <=195 && mouseY>=45 && mouseY<=75 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}}}
nota: los demas condicionales cumplen la misma función solo cambian las posiciones del mouse.

Despues de adquirir un poco de conocimiento solo falta ensayar un poco sobre como entrelazar arduino & processing realamente la unica complicacion que se tuvo fue por la libreria que no se habia cargado pero del resto todo funciona correctamente, pero cabe anotar que la funcion Maxim Java no es la mas eficiente al reproducir un sonido con alta calidad y fidelidad, como primera medida se debe contar con el sofware Arduino para configurar el hardware:


sofware arduino
  inicialmente se debe conectar el arduino configurar su tarjeta y el puerto com luego como se ve en la figura del sofware arduino se ubica en los ejemplos-firmata-standar firmata, luego de abrir el ejemplo lo cargamos al arduino cuando se complete la carga se cierra el sofware y el arduino ya se encuentra programado para entralazarse serialemnte con el processing, acontinuacion el sofware en procesing con la comunicacion necesaria para recibir y enviar datos hacia y desde el arduino:


//comunicacion serial arduino processing
import processing.serial.*; // se importa la libreria de processing para comunicacion serial
import cc.arduino.*;  // se importa la libreria de arduino para processing
Arduino arduino; // se ha
int Pin1= 12;
int Pin= 13;
//final configuracion comunicacion serial
Maxim maxim;
AudioPlayer player1;
AudioPlayer player;
PImage Mai; 
void setup()
{
println(Arduino.list()); //se imprimen las listas de los puertos com instaldos y que reconoce processing
       arduino = new Arduino(this, Arduino.list()[1], 57600); // nuevo arduino conectado el [1] indica que processing reconoce el puerto com con ese numero especialmente
         arduino.pinMode (Pin, Arduino.INPUT);
           arduino.pinMode (Pin1, Arduino.INPUT);// se definen los pines pin, pin1 como entrada deben hacerse en mayuscula
     
  size(512,307);
   Mai= loadImage("conga.jpg");
     maxim= new Maxim(this);
      player= maxim.loadFile("Congas03.wav");
        player1= maxim.loadFile("Congas07.wav");
  
     player.setLooping(true);
         player1.setLooping(true);
         
         }
void draw()   { // los condicionales deben hacerse por el void draw es donde se realizan los ciclos
      background(Mai);
        println(  pmouseX);
          println( pmouseY);
     if (arduino.digitalRead(Pin)==Arduino.HIGH){ // de esta manera especialmente se pregunta por el estado de los pines del arduino y se ejecutan los condicionales
      ellipse(160, 107, 75, 55);
       player.play(); }
        else{
         player.stop();}  
         
      if (arduino.digitalRead(Pin1)==Arduino.HIGH){
        ellipse(350, 107, 75, 55);
         player1.play(); }
          else{
           player1.stop();}
        }

 nota: debe importarse por el skecth la libreria de arduino para procesing ya que sino la tiene por mas que se importe por el (import) genera errores si no la encuentra.

Se puede concluir que se logro con el objetivo planteado ya que fue muy buena experiencia recomiendo a las proximas personas que tengan algun trabajo de esta indole lo realicen con la mayor confiabilidad y les aseguro que aprenderan demasiado. 




Estudiante control 1: MAIRON MARIN

Proyecto control 1: Aplicación acordeón con Processing y Arduino

Jiménez Juan Carlos  COD. 2010119031
GRUPO 2
Ingeniería Electrónica,
Facultad de Ingeniería
Universidad del Magdalena

Resumen—Este proyecto inició con la capacitación en el manejo de Processing el cual es una herramienta de programación muy didáctica y útil para quienes no son grandes programadores, con la ayuda de éste programa se creó una aplicación muy interactiva y fue una acordeón virtual luego para complementar la experiencia se introdujo el control por hardware, en el cual se presionan los botones de la acordeón por medio de unos pulsadores que se comunica con Processing a través  de una placa de desarrollo Arduino, usando comunicación serial se logró transmitir y recibir datos entre el computador y el circuito de control externo.

INTRODUCCIÓN
En este informe se tratan los apartes más relevantes de la aplicación Arduino-Processing, se presenta el desarrollo y construcción del código además de los inconvenientes principales que se encontraron durante el proceso. La importancia de éste proyecto radica en afianzar los conocimientos sobre programación de software y hardware y la comunicación de medios externos al computador, la utilización de Processing y Arduino es un campo nuevo en el manejo de las herramientas debido a esto se requiere de las fuentes oficiales y foros en la web para agilizar la programación.

MARCO TEÓRICO
Processing es un lenguaje de programación, entorno de desarrollo, y comunidad en línea. Desde el año 2001, Processing ha promovido la alfabetización de software con las artes visuales y la alfabetización visual con la tecnología. Inicialmente creado para servir como un bloc de dibujo de software, y para enseñar los fundamentos de programación de computadoras dentro de un contexto visual, Processing se convirtió en una herramienta de desarrollo para los profesionales.
Por otro lado Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar. Se creó para artistas, diseñadores, aficionados y cualquiera interesado en crear entornos u objetos interactivos. Arduino puede ser utilizado para desarrollar objetos autónomos e interactivos, como prototipos o interactuar con software instalado en el ordenador. Dada su rápida curva de aprendizaje y su precio económico es ideal para educadores, diseñadores y cualquiera interesado en la electrónica y robótica.

DESARROLLO DE LA APLICACIÓN
En esta parte haremos una explicación del código en Processing con el cual se generó la aplicación cabe destacar que mediante el compilador de arduino se programó previamente el  hardware para que pudiera hacerse la comunicación serial directamente con Processing. También es importante decir que el código aquí explicado es el de la aplicación final pero que previa a la inclusión de arduino se tenía un código más extenso pero también con más errores.
Primero que todo se llamaron las librerías necesarias en éste caso



La librería minim se usó para la reproducción de sonidos, la librería serial se usó para que Processing pudiera hacer comunicación a través de los puertos y la arduino fue necesaria para que por medio de sentencias en Processing se controlara el arduino
Luego se hacen las declaraciones de variables correspondientes, cabe destacar que AudioPlayer se usa para declarar los sonidos que se van a reproducir



Una vez hecho lo anterior hacemos las configuraciones necesarias primero para la comunicación serial, para imagen de fondo y tamaño de la pantalla, luego se le asignan a variables los distintos fragmentos de sonido y por último se hace la configuración del arduino como lo son los pines de entrada y salida.




El último fragmento de código corresponde a la ejecución de las acciones de control. Primero colocamos la imagen de fondo como fondo, a continuación explicaremos un fragmento de código usado para la reproducción de un sonido y una vez tengamos esto la acción se vuelve repetitiva para los demás sonidos
En un sí, preguntamos si en el pin especifico que estamos usando para determinada tecla del acordeón tiene un alto, si tiene un alto es porque hemos presionad la tecla. Dado que se presentaron problemas con la reproducción entonces se vuelve a configurar la variable para asignarle el sonido e inmediatamente ponemos a reproducirla. Como queremos saber en la pantalla cual tecla del acordeón se reprodujo entonces las siguientes sentencias son para dibujar un rectángulo en el lugar de la tecla por último para que la comunicación sea bilateral se enciende y apaga un led en un tiempo determinado por un retardo. Lo anterior se repite para los restantes siete sonidos.






Para finalizar la explicación podemos mencionar que frecuentemente se presentaron errores como:
Array Index Out Of Bounds: Este error se presenta por la declaración de variables ya sea de la librería debido a esto se exede la capacidad de algún vector que me genera un desbordamiento.
NullPointerException: Esta excepción puede ser lanzada por múltiples causas, la más habitual es que estamos intentando acceder a un atributo de un objeto para el que todavía no hemos reservado memoria.
Además de éstos dos comunes errores se presentaron y se pueden presentar muchos otros éstos se dan debido a la estructura y lógica que le demos a nuestro código de programa.
En las siguientes figuras se muestran las partes de la aplicación:



Figura 1. Esquema general



Figura 2. Arduino Mega 2560





Figura 3. Processing



Figura 4. Pulsadores para controlar botones del acordeón



Figura 5 interfaz visual


REFERENCIAS
http://www.consultoriajava.com/index.shtml