ottoman Posted July 15, 2020 Share Posted July 15, 2020 Hola buen día a todos! Quería preguntar si alguien del foro construyó una controladora midi usando Arduino? Estoy por empezar este proyecto, tengo una noción muy básica de como funciona pero me falta bastante. Si alguno lo hizo y tuviera alguna recomendación o info de como lo hizo estaría muy agradecido! Saludos!! Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 15, 2020 Share Posted July 15, 2020 Buenas! yo hice uno hace unos años atras, documenté todo en un repo. te dejo el link https://github.com/mcniac/midi-controller saludos! 2 Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 15, 2020 Author Share Posted July 15, 2020 hace 2 horas, mcniac dijo: Buenas! yo hice uno hace unos años atras, documenté todo en un repo. te dejo el link https://github.com/mcniac/midi-controller saludos! Muchas gracias! Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 15, 2020 Share Posted July 15, 2020 cualquier pregunta que tengas escribime nomás. Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 21, 2020 Author Share Posted July 21, 2020 En 15/7/2020 a las 15:48, mcniac dijo: cualquier pregunta que tengas escribime nomás. este codigo es valido para arduino mega 2560 tambien? esla version que tengo Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 22, 2020 Share Posted July 22, 2020 creo que no, fijate que yo le cambié el firmware de la leonardo que usé para poderla conectar como midi-usb. sino podes hacer lo mismo pero saliendo por una salida midi y te tenes que conectar a una entrada midi (suponiendo que tu placa de sonido tenga una por ejemplo) o usar un cable midi-usb te recomiendo que revises el repositorio del firmware que usé como base del proyecto https://github.com/rkistner/arcore dice que soporta varias versiones de Leonardo, pero tambien aclara que agregar otras placas es cuestion de agregar algunas configuraciones y compilar. pegale una mirada, en una de esas podes contribuir al proyecto con soporte para esa mega ? Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 22, 2020 Share Posted July 22, 2020 por cierto, si no tenes experiencia encarar esto de una puede ser medio complejo, te recomiendo que hagas pequeñas partes de a una y despues le vas sumando complejidad Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 22, 2020 Author Share Posted July 22, 2020 hace 1 hora, mcniac dijo: por cierto, si no tenes experiencia encarar esto de una puede ser medio complejo, te recomiendo que hagas pequeñas partes de a una y despues le vas sumando complejidad Anoche pude hacerlo andar, es para controlar un rack, hice un circuito en un protoboard con 2 pulsadores y funcionó bien, ahora la idea es armarme una pedalera del estilo ground control... Tengo que sumarle los LEDS a cada pulsador y estaria Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 23, 2020 Share Posted July 23, 2020 genial! si te puedo ayudar en algo avisame. espero ver como queda. Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 24, 2020 Author Share Posted July 24, 2020 hace 7 horas, mcniac dijo: genial! si te puedo ayudar en algo avisame. espero ver como queda. Ahí tengo todo el prototipo hecho, 2 pulsadores con 2 leds, te pregunto... Cuando apretó los pulsadores la señal modo sale instantáneo, perfecto por así decirlo... Pero con los leds es como que aveces hay un delay, al presionar el botón se tiene que encender el LED correspondiente y apagar el otro. Aveces esa secuencia es perfecta pero otras veces no hace el cambio de LED, envía la señal midi pero sigue encendido el LED del pulsador anterior. En estos casos tengo que mantener apretado el pulsador durante medio segundo o un segundo y ahí si hace el cambio de LED, tenés idea a qué se puede deber? Probé hacer unos cambios en el código y sigue igual Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 24, 2020 Author Share Posted July 24, 2020 hace 10 horas, mcniac dijo: genial! si te puedo ayudar en algo avisame. espero ver como queda. https://youtu.be/u_1_ENLY_28 Ahí se puede ver mejor, ese vídeo se lo había pasado a un amigo Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 25, 2020 Share Posted July 25, 2020 creo que eso depende bastante de como lo codificaste, usaste millis o delay? Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 25, 2020 Author Share Posted July 25, 2020 hace 22 minutos, mcniac dijo: creo que eso depende bastante de como lo codificaste, usaste millis o delay? Para los leds no utilice nada, solo comando if, dónde la condición es si el pulsador está activo activa tal les y apaga el resto Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 25, 2020 Author Share Posted July 25, 2020 hace 51 minutos, mcniac dijo: creo que eso depende bastante de como lo codificaste, usaste millis o delay? void loop() { if (digitalRead(buttonOne) == HIGH){ digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); } if (digitalRead(buttonTwo) == HIGH){ digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); este codigo es el que use para los leds Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 27, 2020 Share Posted July 27, 2020 (edited) hiciste debounce? fijate que viene un ejemplo de eso en la misma IDE de arduino. si no le haces debounce el mismo ruido del switch puede hacer que se te disparen eventos de más, por eso el debounce y usar resistencias pullup o pulldown en los pulsadores Edited July 27, 2020 by mcniac aclaracion Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 27, 2020 Author Share Posted July 27, 2020 hace 5 horas, mcniac dijo: hiciste debounce? fijate que viene un ejemplo de eso en la misma IDE de arduino. si no le haces debounce el mismo ruido del switch puede hacer que se te disparen eventos de más, por eso el debounce y usar resistencias pullup o pulldown en los pulsadores No, voy a ver qué onda eso. En los pulsadores según el esquema que ví en un pin se conecta el positivo 5v, y en el otro la entrada digital y una resistencia conectada a masa Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 27, 2020 Share Posted July 27, 2020 claro, esa es una manera de usarlos, y podes hacerlo laburar como NC o NA, otra manera es configurando para que pin funcione como pullup y lo conectas a tierra con un swich. de todos modos el debounce cumple la funcion de evitar el ruido y que se dispare más de una vez. calculá que si no tenes un delay dentro de tu funcion loop esta se va a ejecutar muchismas veces por segundo Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 27, 2020 Author Share Posted July 27, 2020 hace 1 hora, mcniac dijo: claro, esa es una manera de usarlos, y podes hacerlo laburar como NC o NA, otra manera es configurando para que pin funcione como pullup y lo conectas a tierra con un swich. de todos modos el debounce cumple la funcion de evitar el ruido y que se dispare más de una vez. calculá que si no tenes un delay dentro de tu funcion loop esta se va a ejecutar muchismas veces por segundo Claro, lo raro es que la función de enviar el comando midi sale de manera instantánea al apretar el pulsador, la cosa es con los leds... Voy a investigar eso que me decís, de todas formas ya compré los pulsadores por MercadoLibre, y en una metalúrgica me hacen el gabinete de chapa estampada, estilo una réplica del ground control de Voodoo lab voy a hacer pero sin pantalla Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 27, 2020 Share Posted July 27, 2020 y el resto del código? estaras demorando en el envio del comando midi? fijate el codigo que te pase que andaba bien. aunque nunca le puse leds Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 27, 2020 Author Share Posted July 27, 2020 hace 29 minutos, mcniac dijo: y el resto del código? estaras demorando en el envio del comando midi? fijate el codigo que te pase que andaba bien. aunque nunca le puse leds El código midi anda perfecto, apenas toco el pulsador instantáneamente cambia al banco que selecciono. Solo tengo ese delay en los leds Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 28, 2020 Share Posted July 28, 2020 si, te entendí, te pedia que muestres el resto del código a ver si hay otra cosa que lo pueda estar causando ? Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 28, 2020 Author Share Posted July 28, 2020 hace 7 minutos, mcniac dijo: si, te entendí, te pedia que muestres el resto del código a ver si hay otra cosa que lo pueda estar causando ? #include <MIDI.h> #include <midi_Defs.h> #include <midi_Message.h> #include <midi_Namespace.h> #include <midi_Settings.h> const int buttonOne = 22; // assign button pin to variable const int buttonTwo = 23; // assign button pin to variable const int LED1 = 41; const int LED2 = 36; int a; int b; MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut void setup() { pinMode(buttonOne,INPUT); // setup button as input pinMode(buttonTwo,INPUT); // setup button as input pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); Serial.begin(31250); // setup MIDI output } void loop() { if(digitalRead(buttonOne) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonOne) == HIGH) { // check button state again midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel delay(250); midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel delay(1000); // wait 1 second } } if(digitalRead(buttonTwo) == HIGH) { // check button state delay(10); // software de-bounce if(digitalRead(buttonTwo) == HIGH) { // check button state again midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel delay(250);midiOut.sendProgramChange(16,1); // send a MIDI PC -- 12 = value, 1 = channel delay(1000); // wait 1 second } } a = digitalRead(buttonOne); b = digitalRead(buttonTwo); if (a == HIGH){ digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); } if (b == HIGH){ digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); } } Quote Link to comment Share on other sites More sharing options...
ottoman Posted July 28, 2020 Author Share Posted July 28, 2020 tengo ese codigo, es solo aplicado a 2 pulsadores y 2 leds, donde cada pulsador corresponde a un preset solo Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 28, 2020 Share Posted July 28, 2020 man, tenes delays por todos lados, todo eso demora la ejecución del resto de las cosas, si queres evitar esas demoras tenes que implementar todo usando millis Quote Link to comment Share on other sites More sharing options...
mcniac Posted July 28, 2020 Share Posted July 28, 2020 aca explica un poco la diferencia. pegale una mirada https://www.norwegiancreations.com/2017/09/arduino-tutorial-using-millis-instead-of-delay/ Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.