Controlador Arduino personalizado MIDI (13 / 14 paso)

Paso 13: La biblioteca

En la introducción de este Instructable, te prometí una manera fácil de programar su propio controlador de MIDI. Bueno, aquí está!

Es una biblioteca que intenta comprometer entre gran personalización y código fácil de usar, accesible para los principiantes de Arduino.

Actualmente soporta potenciómetros, potenciómetros, interruptores, botones, codificadores rotatorios y tiene una función fácil para enviar comandos MIDI.
Estoy pensando en añadir más salida de LED y soporte de Control de Pitch Bend en el futuro cercano.

Instalación de la biblioteca de MIDI_controller

Esta biblioteca se basa en las funciones de MIDI del software que instalamos anteriormente (Teensyduino, TeeOnArdu, HIDUINO, etc.) así que regresamos al paso 6 y 8 e instalarlos. No se desanime por el procedimiento de instalación aparentemente largo, si sigues las instrucciones, usted debe ser fino. Una vez que todo está configurado, es realmente fácil de usar!

La propia biblioteca de MIDI_controller se instala como cualquier otra biblioteca de Arduino.

Estas son las instrucciones para IDE de Arduino 1.0.6:

  1. Descargar la biblioteca aquí.
  2. En el menú 'dibujo' haga clic en 'importarbiblioteca...' y luego ' Añadir biblioteca...'.
  3. Vaya al directorio de descargas, haga doble clic y en la columna de la derecha, seleccione MIDI_controller.zip.
  4. Haga clic en 'Aceptar'.
  5. Reiniciar el IDE para cargar las palabras clave (para obtener el color naranja para las funciones etc..)

Eso es todo.

Instrucciones para el uso

Primero añadir la biblioteca a su bosquejo escribiendo esta línea en la parte superior del archivo:

La biblioteca tiene actualmente 4 clases: análogo, Digital, DigitalLatch y codificador.

Una clase tiene un conjunto de funciones y un conjunto de variables. Algunos son privados y se utilizan dentro de la clase, otros son públicos y se puede llamar desde fuera de la clase. Más clases aquí.

El primer paso en el uso de una clase es crear a un miembro de la clase. Sobre todo ello, antes de la instalación, puede utilizar el miembro por todas partes en el programa.

Por ejemplo, permite añadir a un miembro 'potenciómetro' de la clase analógica:
Analógica potenciómetro (bla, bla, bla...);
(Sólo ignorar el blah por ahora)

Ahora que el miembro se crea, podemos usar las funciones de análoga en él, por ejemplo, la función de actualización:
potentiometer.refresh() de ;
Al igual que Arduino funciones como digitalWrite, no puede utilizar esas funciones fuera de la instalación o el bucle.

Para la explicación de lo que las funciones de hacen y lo hicieron, leer después de referencia.

Análogo

La clase analógica está diseñada para entradas analógicas, potenciómetros y faders (o sensores analógicos que un valor entre 0 y 5V de salida). Un número de pin inválido dará como resultado el LED en el pin 13 intermitente en 1Hz.

Crear miembros

  • Analógico (pin bytes, controlador de byte, canal de byte, byte de resolución);

el PIN es el pin analógico al leer. Está conectado con el limpiaparabrisas del potenciómetro.

es el número de controlador MIDI (datos 1 en el mensaje de MIDI). Esto es cómo va a aparecer en el software de MIDI, como una dirección única.

es el canal de MIDI.

la resolución es la resolución de la analógica de lectura. Una resolución de 2 le daría sólo 2 posibles valores (0 y 127), una resolución de 3 daría 3 valores posibles (0, 63 y 127). Una resolución de 128 da 128 posibles valores (0-127), esto es el valor por defecto, porque es todos los números de 7 bits. (MIDI utiliza números de 7 bits para el envío de valores) Utilice un valor inferior a 128, como 64, si hay mucho ruido en su entrada, por ejemplo, si el controlador mantiene en envío de 0,1,0,1,0,1,0,1,... Utilice 128 si desea utilizar la máxima resolución disponible.

Funciones

  • Refresh();

Esta función comprueba la entrada, y si ha cambiado desde la última vez que fue llamada actualización, envía el nuevo valor sobre MIDI (en el número de controlador predefinidos y canal).

  • Banco (pin de byte, byte regulador, canal bytes);

Esta función le permite utilizar una entrada analógica (junto con un interruptor) para varios controles. Si el interruptor está en la posición, el controlador y el canal serán las que se han definido durante la creación de miembros, si el interruptor está en la posición ON, el controlador y el canal serán las que se especifican como argumentos de esta función.

el PIN es el pin digital con el interruptor conectado. Se habilitará el resistor interno de pull-up.

controlador es el controlador cuando el interruptor está encendido.

canal es el canal a utilizar cuando el interruptor está encendido.

  • detachBank();

Esta función desactiva la funcionalidad de banco que se creó con la función de Banco. El controlador y el canal serán las que se han definido durante la creación de miembros una vez más, independientemente del estado del interruptor.
El pasador del interruptor definido en la función del Banco se establecerá como una entrada sin resistor de pull-up otra vez.

Constantes

  • Ninguno.

Ejemplos

  • Analog_example
  • Analog_bank_example

Digital

La clase Digital está diseñada para uso con interruptores y botones. Envía un mensaje de noteOn cuando se presiona el botón y un mensaje de noteOff cuando se suelta el botón. Conectar los conmutadores entre la clavija de entrada y el suelo, se utilizarán las resistencias de pull-up interna. Un número de pin inválido dará como resultado el LED en el pin 13 intermitente en 1Hz.

Crear miembros

  • Digital (pin bytes, nota de byte, canal de byte, velocity byte);

el PIN es el pin digital con el botón conectado.

Nota es la nota de MIDI para enviar. 60 es C media, y cada nota media es de más o menos uno. Puede comparar esto al número regulador analógico.

es el canal de MIDI.

la velocidad es tan fuerte se golpea la nota. Esto no importa para un botón normal, siempre y cuando no es 0. (Importa sin embargo para sensibles al tacto los cojines por ejemplo.)

Funciones

  • Refresh();

Esta función comprueba la entrada, y si ha cambiado desde la última vez que fue llamada actualización, envía el mensaje correspondiente: noteOn cuando se presiona el botón, noteOff cuando se suelta el botón.

  • Banco (pin de byte, byte nota, canal bytes);

Esta función le permite usar un botón (junto con un interruptor) para varios controles. Si el interruptor está en la posición, la nota y canal serán las que se han definido durante la creación de miembros, si el interruptor está en la posición ON, la nota y el canal serán las que se especifican como argumentos de esta función.

el PIN es el pin digital con el interruptor conectado. Se habilitará el resistor interno de pull-up.

Nota es la nota cuando el interruptor está encendido.

canal es el canal a utilizar cuando el interruptor está encendido.

  • detachBank();

Esta función desactiva la funcionalidad de banco que se creó con la función de Banco. La nota y el canal serán las que se han definido durante la creación de miembros una vez más, independientemente del estado del interruptor. El pasador del interruptor definido en la función del Banco se establecerá como una entrada sin resistor de pull-up otra vez.

Constantes

  • Ninguno.

Ejemplos

  • Digital_example
  • Digital_bank_example

DigitalLatch

La clase DigitalLatch está pensada para usar con interruptores de palanca, que no son momentáneos. Envía un noteOn y un mensaje de noteOff, cada vez los cambios de estado. El retardo entre el encendido y apagado el mensaje pueden ajustarse. Si el estado cambia antes de que el retraso ha terminado, se envía el mensaje de noteOff todos modos y se inicia otro 'pulso': se envía otro mensaje de noteOn y después fijar retardo, se envía el mensaje de noteOff así.
Esta clase es útil si desea utilizar los botones de 'silencio' o 'solas' el software no momentáneo interruptores de palanca. Si se cambia el interruptor, se silencia la pista apropiada, cuando cambie el interruptor de apagado una vez más, la pista no apagado, por ejemplo.
Conectar los conmutadores entre la clavija de entrada y el suelo, se utilizarán las resistencias de pull-up interna. Un número de pin inválido dará como resultado el LED en el pin 13 intermitente en 1Hz.

Crear miembros

  • DigitalLatch (pin bytes, nota byte, byte canal, velocidad del byte, int retardo);

el PIN es el pin digital con el interruptor conectado. Se habilitará el resistor interno de pull-up.

Nota es la nota de MIDI para enviar. 60 es C media, y cada nota media es de más o menos uno. Puede comparar esto al número regulador analógico.

es el canal de MIDI.

la velocidad es tan fuerte se golpea la nota. Esto no importa para un interruptor normal, siempre y cuando no es 0.

Delay es el retardo entre los mensajes noteOn y noteOff, en milisegundos. 100ms funciona muy bien. No escriba 0.

Funciones

  • Refresh();

Esta función comprueba la entrada y envía el mensaje apropiado, como se explica en la descripción de esta clase. (Nota: no se envía el mensaje de noteOff, si esta función no es llamada otra vez, después de enviar el mensaje de noteOn. Si usted acaba de poner esto en su ciclo, sin embargo, usted debe bien.)

  • Banco (pin de byte, byte nota, canal bytes);

Esta función le permite utilizar un interruptor (junto con un interruptor de banco) para varios controles. Si el interruptor del Banco está en la posición, la nota y canal serán las que se han definido durante la creación de miembros, si el interruptor del Banco está en la posición ON, la nota y el canal serán las que se especifican como argumentos de esta función.

el PIN es el pin digital con el interruptor conectado. Se habilitará el resistor interno de pull-up.

Nota es la nota cuando el interruptor está encendido.

canal es el canal a utilizar cuando el interruptor está encendido.

  • detachBank();

Esta función desactiva la funcionalidad de Banco que se estableció con el Banco de la función. La nota y el canal serán las que se han definido durante la creación de miembros una vez más, independientemente del estado del interruptor. El pasador del interruptor definido en la función del Banco se establecerá como una entrada sin resistor de pull-up otra vez.

Constantes

  • Ninguno.

Ejemplos

  • DigitalLatch_example
  • DigitalLatch_bank_example


RotaryEncoder

Esta biblioteca está pensada para usar con un codificador de cuadratura. Se adapta desde biblioteca de codificador de PJRC. Envía mensajes de relativos. Puede establecer la manera en que se manejan valores negativos. Conectar la clavija común del codificador en el terreno, se utilizarán las resistencias de pull-up interna. Un número de pin inválido dará como resultado el LED en el pin 13 intermitente en 1Hz.

Crear miembros

  • RotaryEncoder (byte pin1, pin2 bytes, controlador bytes, bytes canal, int speedMultiply, byte pulsesPerStep, modo de byte);

PIN1 es el pin de interrupción primero con el codificador conectado.

PIN2 es el segundo pin de interrupción con el codificador conectado.

es el número de controlador MIDI (datos 1 en el mensaje de MIDI). Esto es cómo va a aparecer en el software de MIDI, como una dirección única.

es el canal de MIDI.

speedMultiply es el valor que se multiplicará con el desplazamiento relativo, si el codificador no es rápido en su software. Si, por ejemplo, speedMultiply se establece en 5, y el codificador a enviar un mensaje de '+ 1', ahora se enviará un mensaje de '+ 5'. Valor predeterminado es 1.

pulsesPerStep es el número de pulsos del encoder salidas al girar a un paso, o haga clic en. En un encoder rotatorio normal, esto es 4. Cuando se establece en 4, cambiará la 1 unidad en tu software por haga clic en que girar, en lugar de 4. Esto sobre todo es más lógico. Sin embargo, para ruedas de avance lento puede establecer a 1, para tomar ventaja de la resolución completa de la rueda. Use 'NORMAL_ENCODER' o 'Correr' como argumento.

modo es la manera que se envía el mensaje MIDI (para que sea un número con signo). Hay 3 modos disponibles. Utilizan 'ADD_64', 'SIGN_BIT' o 'POS1_NEG127' como argumento.

Funciones

  • Refresh();

Esta función comprueba la posición de codificador, y si ha cambiado desde la última vez, el cambio relativo se envía a través de MIDI.

Constantes

  • NORMAL_ENCODER

configurar pulsesPerStep para 4, para codificadores rotatorios normales.

  • JOG

establezca pulsesPerStep en 1, para ruedas de avance lento.

  • ADD_64

Primer modo relativo mensajes MIDI. Este es probablemente el más simple. Esto básicamente asigna 0 a 64 (que es 128/2). Por ejemplo, si quiero enviar -1 Añadir 64 = 63 y lo envíe. Si quiero enviar + 1, también añadir 64 = 65. Si envío a sólo 64, el equipo no hará nada, porque sabe que es un desplazamiento de 0. (En el lado de la computadora, sólo restan 64, y se puede utilizar el resultado como si nada ha pasado).

  • SIGN_BIT

Segundo modo de relativa mensajes MIDI. En equipos, sobre todo se guardan los valores firmados con un bit de signo. El bit de signo es el bit más significativo. Cuando es 0, el definido por los otros bits es positivo, cuando es 1, el número es negativo. En un mensaje MIDI, esto es de tipo bit 6 (el bit 7, ya que es basado en 0). Por ejemplo: + 4 sería 0b00000100 y -4 sería 0b01000100.

  • POS1_NEG127

Tercer modo relativo mensajes MIDI. Definir + 1 1 y -1 como 127. Podemos seguir esto: + 2 = 2 y -2 = 126, etc. hasta + 63 = 63 y = 65 -63.

Ejemplos

  • Encoder_example

sendMidi.h

Esta no es una clase, es sólo dos funciones. Automáticamente Descubre qué Arduino está utilizando y elige los ajustes necesarios para enviar un MIDI. (Nota: ya está automáticamente incluido si se incluye la biblioteca de MIDI_controller, ya que las clases dependen de comunicación MIDI.)

Funciones

  • setupMidi (byte ledPin, retraso);

Configura la conexión MIDI. Una vez en configuración.

ledPin es el pin con el LED conectado. Generalmente se trata de 13. El LED parpadeará cada vez que se envía un mensaje. Si no quieres esto, o si desea utilizar todos sus pines como entradas, utilizar 'NO_BLINK'.

Delay es el retardo (en milisegundos) Añadir después de cada mensaje que envía. 5 o 10 ms funciona bien. Aumentar la estabilidad, disminuir para una respuesta más rápida. Uso 'NO_DELAY' para continuar tan pronto como el mensaje se envía sin demora. (Nota: es normal que el 'blink led' a son muy tenues, si usas poco o ningún retraso, esto es simplemente porque el tiempo es muy corto.)

  • sendMidi (byte messageType canal bytes, byte data1, data2 bytes);

Envía un mensaje MIDI.

messageType es el tipo de mensaje, como noteOn, noteOff o CC. Este es un número de 4 bits.

es el canal de MIDI. Se trata de un número de 4 bits.

data1 es el primer byte de datos. Este es un número de 7 bits.

data2 es el segundo byte de datos. Este es también un número de 7 bits.

Nota: Lea paso 6 para obtener más información sobre mensajes MIDI.

  • sendMidi (byte messageType, canal de byte, int datos);

Envía un mensaje MIDI

messageType es el tipo de mensaje, como el cambio de programa o Pitch Bend.

es el canal de MIDI. Se trata de un número de 4 bits.

datos es el valor a enviar. 7-bits en el caso de un cambio de programa, para elegir un instrumento para un canal, o un número entre-8192 y 8191 en caso de un Pitch Bend.

Constantes

  • NO_BLINK

Parpadeará el LED no parpadea cuando se envía un mensaje. El pin del LED también no se establecerá como salida.

  • NO_DELAY

Demora no se añadirá después de enviar el mensaje.

  • NOTE_ON

Tipo de mensajes: 0x90, se utilizan para encender una nota. Utilice NOTE_OFF o enviar otra vez con velocidad = 0 para apagar otra vez.

  • NOTE_OFF

Mensaje tipo: 0 x 80, use para apagar una nota.

  • CC

Tipo de mensaje: 0xB0 (Control de cambio), se utiliza para enviar valores analógicos, como los valores de un potenciometro.

  • PROGRAM_CHANGE

Tipo de mensaje: 0xC0 (cambio de programa), se utiliza para establecer el instrumento de un determinado canal. (Canal 10 es percusión).

  • PITCH_BEND

Tipo de mensaje: 0xE0 (Pitch Bend), usa para enviar grandes valores analógicos.

De depuración

En la carpeta de biblioteca de MIDI_controller, hay un archivo 'debug.h'. Si tienes problemas con los mensajes MIDI, descomentar la línea "#define DEBUG". Esto enviará todos los mensajes de MIDI sobre Serial, a 9600 baudios, en notación hexadecimal. También puede utilizar herramientas como 'midisnoop' para solucionar problemas de mensajes MIDI.

Nota: no olvides comentar la línea hacia fuera otra vez volver a utilizar USB MIDI.

Ejemplos

  • sendMidi_example_intoxicated

Artículos Relacionados

Controlador de DJ MIDI de estilo arcade

Controlador de DJ MIDI de estilo arcade

>>> esto no es muy acabado pero ya armado un poco del circuito. Voy a actualizar el instructivo y subir un video cuando se ordena <<<He sido DJ por cerca de 10 años, y para los últimos he intercambiado buena viejo vinilo moda vinilo virt
Interfaz Arduino USB MIDI

Interfaz Arduino USB MIDI

Hace unas semanas comencé a trabajar en un controlador MIDI con Arduino y ATmega32. Lo hice no terminado proyectado todavía. Está en desarrollo.Usted puede leer toda la historia aquí http://openhardware.ro/arduino-usb-midi-controller/.Pero durante lo
Señal de tráfico / luz de freno cables con controlador Arduino

Señal de tráfico / luz de freno cables con controlador Arduino

siempre ha querido una vieja señal de tráfico y finalmente consiguió uno recientemente.  Sin embargo, fue muy simple cableado para que todas las luces estaban fijos en.  ¿Qué divertido es esto?  También quería probar un controlador Arduino y pensé qu
Controlador Arduino DIY

Controlador Arduino DIY

mi Instructable primer es sobre cómo construir tu propio controlador Arduino!Usted puede construir en un protoboard, pero prefiero la soldadura mi propia. Para uso con proyectos. Esta junta wil no sean capaces de programar un chip ATmega. Yo utilice
Cómo instalar controlador Arduino R3

Cómo instalar controlador Arduino R3

Hoy voy a introducir la forma de instalar controlador Arduino R3.Espero útilPaso 1: Paso 1: driver descargar controlador Arduino R3Puede descargar aquí el driver del controlador Arduino R3Paso 2: Paso 2Conecte el cable de kit Arduino a tu ordenadorDe
Cómo crear un controlador de Dj MIDI

Cómo crear un controlador de Dj MIDI

así que esto era un proyecto escolar. Acabo de terminarlo. El documento adjunto al final es todo el proyecto, como lo he escrito bien a mano. Si desea tratar esta build me avisas y te puedo dar algunas sugerencias. También un alza para este proyecto
Controlador Arduino MIDI

Controlador Arduino MIDI

Un controlador MIDI es cualquier pieza de equipo que genera y transmite los datos MIDI para dispositivos compatibles con MIDI. En Resumen, si tiene botones en el controlador de MIDI, puede programar los botones a cualquier sonido que desee a través d
Controlador Arduino Midi con una distancia de ZX y gesto Sensor

Controlador Arduino Midi con una distancia de ZX y gesto Sensor

Bienvenido a este instructable sobre cómo construir un controlador Midi muy básico con la distancia de ZX de SparkFun y Sensor de gesto. Este instructable es parte de una asignación de la escuela.Nota: Se trata de ningún tutorial de codificación. El
Controlador de pie MIDI basados en Arduino DIY

Controlador de pie MIDI basados en Arduino DIY

Llevo muuuucho tiempo con intentar un lazador de guitarra durante un tiempo, pero no me gusta la idea de gastar dinero en un pedal específicos del lazador cuando puedo usar un ordenador para eso y desde que he estado aprendiendo arduino para divertir
Controlador de pie Midi Arduino para Ableton Live

Controlador de pie Midi Arduino para Ableton Live

Soy un geek. Yo lo sé. Me gustan las cosas DIY'ing. Compré una impresora 3d (que está sentado en mi oficina no funciona ahora mismo)... y como construir drones. Yo generalmente morder más de lo que puedo masticar y a menudo tiene que ir a otros para
Controlador de DJ MIDI PACMOD

Controlador de DJ MIDI PACMOD

para el cumpleaños de mi hijo le hice una controladora para DJ diseñado para parecerse a un viejo gabinete arcade de la máquina. Lo que sigue es un breve resumen del proceso para hacerlo, incluyendo el código.El Teensy fue elegido como el cerebro deb
Shield Arduino personalizado y sensores

Shield Arduino personalizado y sensores

Resumen:Este instructable construirá una serie de módulos de sensor de encargo y un escudo de Arduino. Dichos módulos están disponibles en muchas fuentes diferentes, pero los fanáticos de la Web de Instructables probablemente encontraría satisfacción
Controlador Arduino Rgb desde Vb.net

Controlador Arduino Rgb desde Vb.net

Hola, este es mi primer instractables, hoy te voy a mostrar cómo hacer una controladora rgb con un arduino UNO R3, controlado por una aplicación en vb.netCon este proyecto simplemente controlar su tira led y hacer de qué color te gustaperdón por mi i
Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Instrucciones de armado y puesta en funcionamiento del Midi pedal.(Pedalera controladora MIDI) para Amplitube 3.Hola, uso habitualmente el programa Amplitube 3 para practicar con mi Guitarra, realmente me gustan mucho los sonidos y posibilidades de c