Dudas Sobre Librería MIDI ARDUINO

:slight_smile: Hola que tal a todos, estoy probando esta libreria MIDI, version 3.2 > (http://sourceforge.net/projects/arduinomidilib) pero he tenido algunos problemas espero me puedan ayudar.

al compilar el código me dice que hay problemas con send, pero no entiendo si he seguido todo al pie de la letra tal cual como dice el documento de la librería, también aveces me molesta por los void. :disappointed_relieved:

la idea es enviar datos de noteon y noteoff segun sea el estado del pulsador y que estos datos lleguen por serial o si se pudiera enviar por USB del arduino, según creo la librería dice que es posible pero no entiendo, en fin la idea es probar que llega una nota como si fuera un controlador midi (midi keyboard) a un soft que recibe estos datos como el MidiOX o el ableton live. espero me pueda alguien orientar =(

#include <MIDI.h>
MIDI_Class MIDI;
int pul = 13;   int p = 0;

void setup() {
  pinMode(pul, INPUT);
    Serial.begin(9600);
}
void loop() {

p = digitalRead(pul);

if (p == HIGH) 
   {
      send(NoteOn,145,36,127); 
   }
   if (p == LOW ){
      send(NoteOff,129,36,0); 
  } 
} 
void MIDI_Class::sendNoteOn(byte note, byte velocity, byte channel); 
void MIDI_Class::sendNoteOff(byte note, byte velocity, byte channel);
{
   Serial.println(note);
   Serial.println(velocity);
   Serial.println(channel);
   delay(1000);
}

gracias espero poder contar con su ayuda y su apoyo! :sweat_smile:

Prueba con MIDI.send.

lo probe pero no me reconoce el print de esa variable y por consiguiente el void

Perdón, perdón, me he despistado con la indentación.

Borra de tu programa sendNoteOn y sendNoteOff, estas son llamadas a la libreria y usa:
MIDI.sendNoteOn y MIDI.sendNoteOff, en vez de send.

ok ya lo hize pero no me reconoce estos datos en el void no se si tengo mal esta linea , por que el Serial.println me tira error

Borra todo el majao de Serial, estas imprimiendo variables no declaradas y borra todo lo que hay debajo de MIDI_Class.

Pon el delay antes de cerrar el parentesis del loop.

Estoy en un chisme móvil y no puedo ponerte como quedaria.

todavia con error me sale un error al compilar borrando el MIDI_Class: ... y pues sin el me sale otro error ... ahora si que no entiendo que pasa =( espero me puedas ayudar cuando estés fuera del móvil... gracias

Bueno, pues ya estoy de vuelta delante del ordenador.

Pues aquí te dejo cómo quedaría el programa que quieres:

#include <MIDI.h>

uint8_t pul = 13;   
uint8_t p = 0;

void setup() 
{
  pinMode(pul, INPUT);
  MIDI.begin ( 1 ); // Defino canal de entrada MIDI 1.
}
void loop() 
{

  p = digitalRead(pul);

  if (p == HIGH) 
  {
     MIDI.sendNoteOn(45,36,1); // Manadar la nota (pitch 45, velocidad 36, canal MIDI 1
  }
  if (p == LOW )
  {
      MIDI.sendNoteOff(45,36,0);  // Lo mismo pero parar
  } 
  delay (1000);
}

Varios comentarios:

  • El objecto MIDI ya viene pre-instanciado (con lo que no tienes que definirlo).
  • Antes de usar la librería tienes que usar MIDI.begin para definir el canal MIDI de entrada.
  • No puedes usar la linea serie para nada que no sea una interfaz MIDI. Es decir, la librería lo que hace es sacar comandos MIDI a 31250 baudios (vidrios - para los amigos), por la linea serie. Con lo cual tendrás que usar alguna otra cosa para ver lo que hace tu código.
  • Si no quieres atufar con comandos MIDI a tu dispositivo de entrada MIDI, tendrás que hacer una gestión un poco más astuta de cuando envías el mensaje MIDI. En el ejemplo he puesto, un delay de 1s, sin este delay, lo que va a suceder es que vas a enviar continuamente que toque una nota o que la quite dependiendo de si tienes el pulsador presionado o no (no tiene sentido en un dispositivo MIDI).

Espero que te esto te ayude.

@mrjtwo - Ha funcionado? Lo has llegado a probar?

FM, estoy intentando lo mismo. ya tengo las libreritas, la diferencia que estoy usando un sensor piezo, la idea es enviar una nota determinada pero con la intensidad o velocidad que me de la fuerza del golpe.. lo hacia de manera antigua, con el típico ejemplo que viene con el Arduino Knock pero insertándola en el ejemplo MIDI, logre hacer que me sonara una nota X a una intensidad X, pero me encontré con un problema en la polifonía, no me dejaba tocar varias notas el mismo tiempo.. al parecer cada nota tienen que ir detrás de la otra sin retardo y luego enviar el mensaje.. para luego apagar la nota.. no lo tengo claro aun, a pesar de leer mucho sobre mensajes MIDI, aun no tengo claro esto, pero tratare de hacerlo con piezo, y esta librería, para ver si me funciona menor.

En cuanto tenga resultado les comento. Gracias por las futuras ayuda.

Saludos J.L