Go Down

Topic: Codigo controlador midi basico (Read 2530 times) previous topic - next topic

julijet60

Sep 07, 2011, 09:07 pm Last Edit: Mar 02, 2017, 04:39 am by surbyte
Hola!, estoy contruyendo un controlador midi muy simple.
Quiero que tenga 5 potenciometros (uno por cada analog in)
Me he basado en este esquema:


y en este codigo que es una mejora del codigo del proyecto de la imagen:
Code: [Select]
void setup()
{
   Serial.begin(31250);       // Default speed of MIDI serial port
   pinMode(13, OUTPUT);       // Light LED on pin 13 to notify of readynes
   digitalWrite(13, HIGH);
}

int iAn0Val, iAn1Val;

void loop()
{
   //Slider X
   int iAn0ValPrev = iAn0Val; //Get the previous value of slider X
   iAn0Val = analogRead(0)/8;
   analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX the value of slider X
  
   //Slider Y
   int iAn1ValPrev = iAn1Val; //Get the previous value of slider Y
   iAn1Val = analogRead(1)/8;
   analogPinMidiTX(2,iAn1Val,iAn1ValPrev); //TX the value of slider Y
}

void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{  
  //only TX the value over midi if it is changed, as to prevent spamming the midi port and thus confusing the receiving application in learning mode
  if(iValPrev != iVal)
  {
    MidiTX(176,iChan,iVal);
  }
}

void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //pass values out through standard Midi Command
{
   Serial.print(MESSAGE);
   Serial.print(CONTROL);
   Serial.print(VALUE);
}


El problema es que este codigo está hecho para ser utilizado con solo 2 potenciometros, y a mi me gustaría utilizar 5 como ya dije. Qué modificaciones tengo que hacer en el codigo para conseguirlo?

Un saludo y gracias de antemano

SrDonGato

No tengo mucha idea de lo que hace esto.

te pregunto que hacen cada uno de los dos potenciómetros ?

que quieres que haga cuando le pongas 5 ?


julijet60

Cada uno de los 5 potenciometros manda una señal midi distinta, para controlar distintos parametros de un software de sonido. No se si me explico.
Aqui te dejo un video de como funciona el proyecto de la imagen, para ver si aclara algo:
http://www.youtube.com/watch?feature=player_embedded&v=-bTyXk2I3Ys

masteron

Lo tienes muy facil. Ya tienes creadas dos variables, una para cada potenciometro. Debes de crear tantas como potenciometros mas vayas a usar.
Y luego copiar la funcion que tiene cada variable dentro del loop y pegarla tantas veces como variables hayas creado, cambiado el nombre de la variable.

Si te fijas vien veras lo que cambia en cada variable, y podras añadir otras nuevas.

Ademas creo que el codigo no esta bien del todo, pero primero prueba a añadir los potenciometros.

Ten en cuenta que para poder usar el arduino como controlador midi, tienes que usar programas como el midiyoke o el midiox, si no, no te lo reconocerá ningún software.

julijet60

#4
Sep 09, 2011, 01:54 am Last Edit: Sep 09, 2011, 01:58 am by julijet60 Reason: 1
gracias por las respuestas, ya lo tengo todo controlado, excepto un potenciometro que no funciona y creo que es porque lo he quemado con el soldador... falta de experiencia  :smiley-roll-sweat:
aquí dejo el código:
Code: [Select]
void setup()
{
  Serial.begin(31250);       // Default speed of MIDI serial port
  pinMode(13, OUTPUT);       // Light LED on pin 13 to notify of readynes
  digitalWrite(13, HIGH);
}

int iAn0Val, iAn1Val, iAn2Val, iAn3Val, iAn4Val;

void loop()
{

   //1
  int iAn0ValPrev = iAn0Val;
  iAn0Val = analogRead(0)/8;
  analogPinMidiTX(1,iAn0Val,iAn0ValPrev);
 
  //2
  int iAn1ValPrev = iAn1Val;
  iAn1Val = analogRead(1)/8;
  analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
 
  //3
  int iAn2ValPrev = iAn2Val;
  iAn2Val = analogRead(2)/8;
  analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
 
  //4
  int iAn3ValPrev = iAn3Val;
  iAn3Val = analogRead(3)/8;
  analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
 
  //5
  int iAn4ValPrev = iAn4Val;
  iAn4Val = analogRead(4)/8;
  analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
 
 
}

void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{  
 //only TX the value over midi if it is changed, as to prevent spamming the midi port and thus confusing the receiving application in learning mode
 if(iValPrev != iVal)
 {
   MidiTX(176,iChan,iVal);
 }
}

void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //pass values out through standard Midi Command
{
  Serial.print(MESSAGE);
  Serial.print(CONTROL);
  Serial.print(VALUE);
}


mañana subo una foto de como me ha quedado todo ensamblado con su caja y todo, es bastante original el diseño  :smiley-mr-green:

Juanaca

hola, tengo un controlador midi con tan solo un potenciometro,tarjeta Arduino Leonardo,he copiado tu plano tal y como esta ahí,solo que con un potenciometro y me funciona, solo que el potenciometro en el pluguin no funciona como debería,da saltos y se queda tembleque, pienso que s tema de valores en la programacion,ni idea, pero seguro eu tu sabes.gracias

Go Up