Jump to content

Recommended Posts

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!!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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 😉

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

genial! si te puedo ayudar en algo avisame. espero ver como queda.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

creo que eso depende bastante de como lo codificaste, usaste millis o delay? 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Posted (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 by mcniac
aclaracion

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

si, te entendí, te pedia que muestres el resto del código a ver si hay otra cosa que lo pueda estar causando 😄

Share this post


Link to post
Share on other sites
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);
    
}
}

Share this post


Link to post
Share on other sites

tengo ese codigo, es solo aplicado a 2 pulsadores y 2 leds, donde cada pulsador corresponde a un preset solo

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...