Ante todo muchas gracias a Igor por la inestimable fuente de ayuda que pueden ser manuales bien redactados y explicados de un modo sencillo y eficiente, porque incluso los que tenemos conocimientos, entre los que me incluyo, a veces sentimos perder la frialdad, que podemos a priori tener, cuando las cosas parecen no funcionar.
El tutorial sobre midi y arduino es tan sencillo de que funcione como de que no. Instale el driver de roland y xp lo reconocía pero no dejaba entrar en sus propiedades de configuración para ordenarle porque puerto –el mismo que el FTDI de arduino- debía leer. Con esto cualquiera puede pensar que estamos perdidos porque roland sólo tiene un driver serie, el resto de la página son del controlador de teclado que no nos valen.
Pueden existir más drivers, de Alesis por ejemplo, pero habiendo alguien testeado los resultados, óptimos, con este driver conviene agarrarse a él como fuera.
Desisntalo el driver, y también el midiyoke, midikent –en xp-, y Logic Audio recupera su buen funcionamiento –porque el midiykent crea un feedback que anula la funcionalidad del programa- y vuelvo a instalar el driver de roland. Ahora si que lo coje y en la misma instalación le indico el puerto por el que debe escuchar a Arduino.
Abro Logia, cargo un VST, por ejemplo Predator, Blue, AudioBassline, Hypersonic, y el solito, sin que yo le diga nada, comienza a soltar notas. Sin hacer nada, con el circuito de la LDR que pone los datos en el puerto serie.
Funciona. En los hilos en inglés la gente empieza a tener problemas del tipo películas de Boollywood, pero aquí ha ido todo bien.
XP Profesional 2002 SP2 y Logia 5.5
Tengo conectado un teclado controlador y puedo controlar parámetros del mismo VST que está sonando con los datos de la LDR. Grande!
El código del manual en pdf de Igor incluye el cálculo de la tecla que suena, yo le he añadido el del control CC generado a partir de lo que toma la LDR.
int ldrPin = 3; // Entrada analógica
void setup() {
Serial. begin( 38400 );
}
byte note, vel, ldr ;
int dur;
void loop() {
// Leer el sensor
ldr = analogRead( ldrPin);
if ( ldr > 65 ) {
// Nota y velocidad (fuerza)
vel = random (0,127); //volumen de la nota, a 100 por defecto
note = 32 + ldr / 16; // calcular la nota
dur = random( 50, 500); // duración aleatoria entre 50 y 500
// Pulsar tecla
printByte( 144); // Note- on
printByte( note); // Nota
printByte( vel); // Velocidad
delay( dur); // espero un poco, se puede poner un valor fijo como 1”
// Soltar tecla
printByte( 144); // Note- on
printByte( note); // Nota
printByte( 0); // Velocidad cero
// Rotar potenciómetro, pedal?
printByte( 176); // para los CC, knobs, modulación?
printByte( 73); // Nota
printByte( note); // Velocidad
delay( dur); // espero un poco, se puede poner un valor fijo como 1”
// Soltar potenciómetro, pedal?
printByte( 176); // Note- on
printByte( note); // Nota
printByte( 0); // Velocidad cero
}
}
Ahora surgen preguntas:
¿Se puede usar más de un sensor para un VST diferente? Entonces habrá que usar canales midi diferentes. Una LDR en el 1 a VST1 y un sensor PIR de ultrasonidos por el 2 al VST2, para tener sensores en lugares diferentes controlando varias cosas y no limitarse a un solo sonido cambiante.
Se controla la nota con 144 y el ControlChange -CC- con 176 pero el canal como de indica, he mirado un manual de MIDI por USB de un hilo en inglés y no he visto nada. Según el primer post, alguien usaba como driver serial el S2MIDI. En esa página, TransIP - Reserved domain, en la descarga del plugin se incluyen 3 ejemplos en arduino. al abrir uno, el multidrum, veo que emplean lo que en el pdf de Igor también se hace, el envío de la nota, y el CC que he añadido, pero ellos también emplean una sentencia:
controlChange(midiChannel,10,reading), donde especifican el canal midi, que es la historia de este párrafo. O sea que se puede, pero habrá que averiguar como el driver de roland entiende esto.
Que la gente vaya experimentando y comentamos las experiencias para que todos aprendamos algo. Un saludo.
Por cierto, ¿alguien sabe como usar el serial monitor para ver los datos que se envían? En Logia lo veo, pero en Arduino no se cómo.