La placa la encontre en la ciudad de México de manera relativamente fácil y me puse a aprender programación para poder llevar acabo mi proyecto. Una vez empece a trabajar con ella me di cuenta que en las librerías de dicha placa no existía el soporte MIDI-USB por lo cual tenia que hacer la conexión por hardware y eso no era lo que quería así que deje el proyecto de lado buscando eventualmente si la situación había cambiado.
Después de haber dejado el proyecto unos meses realize una nueva búsqueda y encontré el trabajo de Rkistner quien había modificado el core de las librerías de hardware de la Leonardo para que pudiera ofrecer el soporte que yo necesitaba para realizar mi proyecto y aunque técnicamente el trabajo de Rkistner esta en desarrollo y no ofrece APIs de alto nivel por el momento es relativamente fácil entender el protocolo de los mensajes midi para crear el código necesario de entrada y salida, así que de nuevo me puse a trabajar en ello.
En internet existe bastante documentación de controladores MIDI basados en Arduino así que es relativamente fácil programar la placa para recibir leer potenciometros y botones y enviar los mensajes correspondientes, lo que no encontré y era parte de mi proyecto eran buenas referencias para el uso de un encoder (si, mi perversión es hacer scratch como los dj famosos) de igual manera me puse a investigar y probar códigos que encontré en internet para leer el encoder. Quizá sea mi completa inexperiencia en programación pero ninguno de los códigos que encontré funciono y no quise tomarme la molestia de entender lo que los autores habían intentado o su método de lectura del rotativo.
Si usamos algo de logica es sencillo entender como funciona uno de estos encoders para detectar el movimiento hacia adelante o hacia atrás entonces cree un código muy sencillo que detectara dos cosas, una si el encoder se había movido desde su ultima lectura y dos, en que sentido se había movido, y así enviar el mensaje correspondiente a su movimiento.
Aqui el enlace: Encoder código basico.
Entre una cosa y otra también me puse a diseñar la forma física que tendría mi controlador y llegué mas o menos a esto:
De nueva cuenta modifique el código para que leyera los mensajes Control Change que salen de Traktor y los utilizara para encender el/los leds.
Usando un solo led con la salida PWM (analogWrite) el led parece estar encendido siempre (por el momento no he comprado el LM3914) entonces he optado (igual de momento) por usar el led de manera digital usando un nivel de referencia para que encienda solo cuando el nivel de la señal exceda cierto parámetro y solo represente los pulsos mas altos, como se puede ver en el siguiente video todo va funcionando como se espera.
Aqui el código basico para enviar y recibir MIDI, un encoder con una salida de nivel de señal para led en dos versiones, led análogo y led digital, es necesario renombrar los archivos eliminando el signo "+": Encoder code.
Espero esta información sea util para alguien mas e ire informando de los progresos.
No hay comentarios:
Publicar un comentario