collapse

* Posts Recentes

Emulador NES em ESP32 por jm_araujo
[Ontem às 18:12]


Circuito Microfone que funcione por almamater
[27 de Abril de 2024, 17:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]

Autor Tópico: Modificação de um teclado MIDI  (Lida 35332 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re: Modificação de um teclado MIDI
« Responder #90 em: 15 de Agosto de 2011, 03:18 »
desculpa não ter tido grande tempo para te ajudar :S

olha, estás a usar a biblioteca MIDI para arduino? com essa biblioteca consegues definir funções que são chamadas automaticamente em determinadas situações (eventos). neste caso, a biblioteca MIDI pode fazer-te com que ao receberes uma mensagem midi, se for uma mensagem Control Change, é chamada uma função que tu definiste, se for outra coisa qualquer, é chamada outra função que tu defines. Chamam-se funções call-back.
sinceramente nunca cheguei a usar esta biblioteca, mas creio que ao usá-la, possas sentir-te mais seguro de que o teu arduino faz exactamente o que queres!

http://www.arduino.cc/playground/Main/MIDILibrary
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re: Modificação de um teclado MIDI
« Responder #91 em: 15 de Agosto de 2011, 03:21 »
acho que encontrei a ferramenta de que precisas para poderes enviar MIDI pela porta série de volta para o arduino :)

http://www.stephenhobley.com/blog/2010/02/15/serial-port-midi-relay/
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #92 em: 15 de Agosto de 2011, 11:21 »
desculpa não ter tido grande tempo para te ajudar :S

olha, estás a usar a biblioteca MIDI para arduino? com essa biblioteca consegues definir funções que são chamadas automaticamente em determinadas situações (eventos). neste caso, a biblioteca MIDI pode fazer-te com que ao receberes uma mensagem midi, se for uma mensagem Control Change, é chamada uma função que tu definiste, se for outra coisa qualquer, é chamada outra função que tu defines. Chamam-se funções call-back.
sinceramente nunca cheguei a usar esta biblioteca, mas creio que ao usá-la, possas sentir-te mais seguro de que o teu arduino faz exactamente o que queres!

http://www.arduino.cc/playground/Main/MIDILibrary

Eu já tinha visto essa biblioteca MIDI e já a saquei e instalei, mas ainda não vi muito bem o que faz, tenho de dar mais uma olhada no pdf que tras :)

acho que encontrei a ferramenta de que precisas para poderes enviar MIDI pela porta série de volta para o arduino :)

http://www.stephenhobley.com/blog/2010/02/15/serial-port-midi-relay/

Vou exprimentar e já dou feedback :)

Obrigado por toda a ajuda até agora tcustódio ;)

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #93 em: 15 de Agosto de 2011, 22:35 »
Não me orientei com o programa e quanto a biblioteca MIDI tambem está dificil perceber :-\

--- EDITADO ---

Tentativas a tras de tentativas e o programa que indicaste não converte nem Serial -> MIDI nem MIDI -> Serial :-\ Estive a procurar da solução no site deles mas não encontrei nada :S:S
« Última modificação: 16 de Agosto de 2011, 23:27 por diogo0880 »

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #94 em: 18 de Agosto de 2011, 15:48 »
desculpa não ter tido grande tempo para te ajudar :S

Não há problema nenhum amigo, eu agradeço toda a ajuda que tens dado ;)

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #95 em: 31 de Agosto de 2011, 10:58 »
Definitivamente não consigo fazer com que o programa envie sinais midi para o arduino... :(
O programa em questão é o Traktor, entre outros

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #96 em: 18 de Setembro de 2011, 16:35 »
Boas pessoal, em primeiro lugar quero pedir desculpa pela demora, tenho estado com algumas dificuldades em prestar tempo a este projecto :-\
Em segundo lugar quero dizer que encontrei um código em que parece ser a solução para o problema dos LED's ligarem via MIDI. Acontece é que ainda não o consegui por a funcionar... o código é o seguinte:

Código: [Seleccione]
/* Midi In Basic  0.2 // kuki 8.2007
 *
 * -----------------
 * listen for midi serial data, and light leds for individual notes

 IMPORTANT:
 your arduino might not start if it receives data directly after a reset, because the bootloader thinks you want to uplad a new progam.
 you might need to unplug the midi-hardware until the board is running your program. that is when that statusLed turns on.

#####################################################################################################################################################
SOMETHING ABOUT MIDI MESSAGES
 midi messages start with one status byte followed by 1 _or_ 2 data bytes, depending on the command

 example midi message: 144-36-100
   the status byte "144" tells us what to do. "144" means "note on".
   in this case the second bytes tells us which note to play (36=middle C)
   the third byte is the velocity for that note (that is how powerful the note was struck= 100)
 
 example midi message: 128-36
   this message is a "note off" message (status byte = 128). it is followed by the note (data byte = 36)
   since "note off" messages don't need a velocity value (it's just OFF) there will be no third byte in this case
   NOTE: some midi keyboards will never send a "note off" message, but rather a "note on with zero velocity"
 
 do a web search for midi messages to learn more about aftertouch, poly-pressure, midi time code, midi clock and more interesting things.
#####################################################################################################################################################

HARDWARE NOTE:
The Midi Socket is connected to arduino RX through an opto-isolator to invert the midi signal and seperate the circuits of individual instruments.
connect 8 leds to pin2-pin9 on your arduino.

####################################################################################################################################################


 */

//variables setup

byte incomingByte;
byte note;
byte velocity;


int statusLed = 13;   // select the pin for the LED

int action=2; //0 =note off ; 1=note on ; 2= nada


//setup: declaring iputs and outputs and begin serial
void setup() {
  pinMode(statusLed,OUTPUT);   // declare the LED's pin as output
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
 
  //start serial with midi baudrate 31250 or 38400 for debugging
  Serial.begin(31250);       
  digitalWrite(statusLed,HIGH); 
}

//loop: wait for serial data, and interpret the message
void loop () {
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // wait for as status-byte, channel 1, note on or off
    if (incomingByte== 144){ // note on message starting starting
      action=1;
    }else if (incomingByte== 128){ // note off message starting
      action=0;
    }else if (incomingByte== 208){ // aftertouch message starting
       //not implemented yet
    }else if (incomingByte== 160){ // polypressure message starting
       //not implemented yet
    }else if ( (action==0)&&(note==0) ){ // if we received a "note off", we wait for which note (databyte)
      note=incomingByte;
      playNote(note, 0);
      note=0;
      velocity=0;
      action=2;
    }else if ( (action==1)&&(note==0) ){ // if we received a "note on", we wait for the note (databyte)
      note=incomingByte;
    }else if ( (action==1)&&(note!=0) ){ // ...and then the velocity
      velocity=incomingByte;
      playNote(note, velocity);
      note=0;
      velocity=0;
      action=0;
    }else{
      //nada
    }
  }
}

void blink(){
  digitalWrite(statusLed, HIGH);
  delay(100);
  digitalWrite(statusLed, LOW);
  delay(100);
}


void playNote(byte note, byte velocity){
  int value=LOW;
  if (velocity >10){
      value=HIGH;
  }else{
   value=LOW;
  }

 //since we don't want to "play" all notes we wait for a note between 36 & 44
 if(note>=36 && note<44){
   byte myPin=note-34; // to get a pinnumber between 2 and 9
   digitalWrite(myPin, value);
 }

}

Percebem-no? ???

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #97 em: 22 de Setembro de 2011, 14:26 »
Boas Tardes amigos :)
Tenho boas novidades...

Seguindo um esquema eléctrico e um código de programação (colocado no post anterior), consegui fazer com certos LED's ligassem ao pressionar determinadas notas do piano e o arduino continuasse a receber e a enviar sinais para o computador! =D   O resultado na Placa de Testes foi este:

Se quiserem ver o esquema eléctrico, apesar de estar confuso, está aqui (http://img716.imageshack.us/img716/4456/s1potetecladomidiesquem.png)

O potenciómetro junto à ficha DIN foi para testar o envio de informação para o computador.
A recepção de informação vinda do computador foi testada com o upload do código do potenciómetro :)

Até agora parece estar a avançar muito bem, vou estudar melhor o código do post anterior e tentar fazer com que seja o computador a ligar os led's que eu quero :)

Agradeço qualquer ajuda que já tenham dado, ou que venham a dar (sim porque vou percisar MUITO dela ;D)
Obrigado pessoal!!



Só um à parte para o tcustodio.
Aquele programa que me indicaste anteriormente, o MIDI Relay, funciona apenas num sentido (Arduino -> PC). Confirmei isto com o programador que originou o programa :-\
Mas obrigado na mesmo amigo ;)

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #98 em: 24 de Setembro de 2011, 23:01 »
Pessoal tou com um problema que me está a impedir de avançar no projecto :-\

Como não encontro nenhum programa que converta MIDI -> Serial, a unica maneira de testar (penso eu) é alterando o firmware do atmega8U2 para que o arduino seja detectado como um dispositivo MIDI...

Mas como é obvio isto não é nada facil de se fazer e estou com grandes duvidas de como carregar o firmware e como voltar ao firmware original, especialmente porque não encontro informação para o meu arduino (Arduino UNO R2)

Ajuda?? :-\ :-\

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Modificação de um teclado MIDI
« Responder #99 em: 25 de Setembro de 2011, 12:55 »
O R2 é uma pequena alteração no circuito do autoreset, por isso pesquisa unicamente por uno.
O programa para reprogramares o Atmega8u2 podes sacar da Atmel e chama-se Flip.
Avr fanboy

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #100 em: 26 de Setembro de 2011, 23:59 »
O R2 é uma pequena alteração no circuito do autoreset, por isso pesquisa unicamente por uno.
O programa para reprogramares o Atmega8u2 podes sacar da Atmel e chama-se Flip.

Já alterei o firmware e funciona as mil maravilhas =D
O programa já controla os LED's

Vou continuar com os testes e com a aprendizagem de C++, quando tiver novidades posto :)

Obrigado por toda a ajuda até agora :)

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Modificação de um teclado MIDI
« Responder #101 em: 27 de Setembro de 2011, 00:35 »
Video!!:P

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #102 em: 27 de Setembro de 2011, 09:31 »
Video!!:P

Assim que avançar mais um pouco no projecto meto um video :)

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #103 em: 04 de Outubro de 2011, 16:13 »
Devagarinho vou fazendo mais umas coisas no arduino :D
Mas para já deixo-vos aqui um pequeno guia para porem o Arduino em modo DFU



Seguindo a imagem acima, faz-se o seguinte:
1º- Liga-se o Arduino ao PC;
2º- Liga-se o fio 1 ao pino indicado;
3º- Toca-se com o fio 2 no pino indicado;
4º- Desliga-s o fio 1 do pino;
e pronto, tens o arduino em modo DFU

O Arduino deixará de ser detectado como ele próprio e será necessário instalar novos drivers para este modo (os drivers estão no directório do programa Flip da ATMEL, o qual eu aconcelho para modificar o firmware) :)

Offline diogo0880

  • Mini Robot
  • *
  • Mensagens: 55
Re: Modificação de um teclado MIDI
« Responder #104 em: 26 de Novembro de 2011, 12:19 »
Pessoal depois deste tempo todo e das cenas que fui aprendendo, descobri que não consigo fazer o que quero com o arduino.
Eu perciso que os pots sejam precisos e, por causa da função map, os valores dos pots saltam de 5 em 5 :S

De qualquer maneira não tenho muito tempo para me dedicar a este projecto agora...

Obrigado pela vossa ajuda

Cumprimentos