0% encontró este documento útil (0 votos)
8 vistas2 páginas

Controlador MIDI con Arduino

El documento describe un código Arduino para un controlador MIDI que incluye la configuración de botones y potenciómetros. Se detallan las funciones para leer el estado de los botones, enviar mensajes MIDI y gestionar el retardo antirrebote. Además, se explica cómo enviar mensajes MIDI CC basados en las lecturas de los potenciómetros.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas2 páginas

Controlador MIDI con Arduino

El documento describe un código Arduino para un controlador MIDI que incluye la configuración de botones y potenciómetros. Se detallan las funciones para leer el estado de los botones, enviar mensajes MIDI y gestionar el retardo antirrebote. Además, se explica cómo enviar mensajes MIDI CC basados en las lecturas de los potenciómetros.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Lutheria

Muszczynski Joan

Código Arduino - Controlador MIDI

1. Declaraciones globales
const int nBotones = 8;
- Define cuántos botones hay. Se usa para recorrer bucles y definir tamaños de arrays (una
sola variable que contiene varios espacios de memoria).

const int calibracion = 80;


- Tiempo de espera (en ciclos) para evitar rebotes mecánicos de los botones. Aunque vos
presionás el botón una sola vez, el Arduino puede leerlo como si lo presionaras muchas
veces en milisegundos, sino tiene “calibración”.

boolean notaioff[nBotones];
- Guarda el estado de cada nota MIDI (1 = apagada, 0 = encendida).

int contador[nBotones];
- Array de contadores independientes por botón, usados para el retardo antirrebote.

byte notas[] = {72,74,76,78,80,82,84,86};


- Array con las notas MIDI (C5, D5, etc.) que activarán los botones.

const int nPots = 2;


- Número de potenciómetros conectados.

int lecturas[nPots], lecturasAnteriores[nPots];


- Almacenan las lecturas actuales y anteriores de cada potenciómetro para detectar
cambios.
2. Función setup()
[Link](115200);
- Inicializa la comunicación serial a 115200 baudios.

for (int i = 0; i < nBotones; i++) { pinMode(i+2, INPUT_PULLUP); }


- Configura los pines D2 a D9 como entradas digitales con resistencia pull-up interna.

3. Función loop()
Lectura de botones:
- Se recorre cada botón.
- Si está presionado y la nota está apagada, se envía Note On y se marca como encendida.
- Si está suelto y la nota está encendida, se envía Note Off y se marca como apagada.
- El contador evita múltiples envíos rápidos.

Lectura de potenciómetros:
- Se hace analogRead() en A0 y A1, se mapea a 0–255 y se guarda en 'lecturas'.

Comparación y envío de MIDI CC:


- Si la lectura cambió más de ±1 respecto a la anterior, se envía un mensaje MIDI CC
(controlador 30 y 31).
- El valor enviado se divide por 2 para mapearlo a 0–127 (rango MIDI).

Ejemplo de mensaje:
midi(176, k+30, lecturas[k]/2);

4. Función midi()
void midi(unsigned char command, unsigned char note, unsigned char vel)
- Envía tres bytes MIDI al puerto serie.
- command: tipo de mensaje (144 = Note On, 128 = Note Off, 176 = Control Change)
- note: número de nota o controlador
- vel: velocidad o valor del control

También podría gustarte