short nota[6] = {32, 34, 36, 37, 39, 41};
short valor[6] = {0, 0, 0, 0, 0, 0};
long tempo[6] = {0, 0, 0, 0, 0, 0};
short canal_bateria = 9;
short threshold = 10;
short debounce = 75;
short offset = 20;
short pratos = 4;
short i = 0;
void setup() {
Serial.begin(31250);
}
void loop() {
valor[i] = (analogRead(i)/8);
if ((valor[i] > threshold) && (millis() - tempo[i] >= debounce)){
noteOff(canal_bateria, nota[i]);
noteOn(canal_bateria, nota[i], valor[i] + offset);
tempo[i] = millis();
}
i++;
if (i == pratos) i = 0;
}
void noteOn(byte channel, byte note, byte velocity) {
midiMsg(channel+0x90, note, velocity);
}
void midiMsg(byte cmd, byte data1, byte data2) {
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}
Isso envia comandos MIDI que podem ser usados por Software em tempo real? Tipo Ableton Live?
Próximo passo, controlar guitar hero.
nao percebi uma coisa.
O que está por debaixo das resistencias?
Só tenho uma duvida, os fios que usaste são unifilares ou multifilares? parecem unifilares, e se forem, aconselho a mudar :Pnão tinha aqui multifilares, mas já arranjei uns metros de cabo de áudio, é só descarnar :D Faço um novo e ofereço este a quem o quiser :D
Não estou a par é das ligações dos piezos com as resistências e os zeners. Nao me conseguias arranjar um esquema disso? Valores recomendados para resistencias e zeners?já ali meti um esquema das ligações. Eu aprendi as ligações a olhar para o drumkit kit original, penso que seja mais fácil ver pelo original!
Em relação ao código, li um bocado na diagonal, nao percebi o porquê da utilização de um "offset". É para dar mais "boost" à cena?sim, na prática é só para me poupar o trabalho de ter que bater fortemente nos pratos, é mesmo só um boost.
Outra duvida que tenho é a seguinte: ao mandares comandos MIDI pela porta série, o Ableton vai logo reconhecer que existe um "controlador MIDI" ligado ao PC? Neste caso, o arduino ligado ao PC.Não, eu usei um software que já tinha encontrado no início destas andanças:
Parece realmente muito bom mas um video e uma melhor explicação da construção dessa placa era bom :)Não tenho câmera em condições para isso, muito menos com capacidade para focar coisas de perto (tinha uma Sony analógica ligada à placa de tv, mas morreu :'( conseguia gravar a 800x600, tinha autofocus, era linda, espetacular... e era quase tão velha como eu ;D)
De certeza que a imagem com as ligações foram corrigidas? é que eu vejo as mesmas imagens que antes.
De certeza que a imagem com as ligações foram corrigidas? é que eu vejo as mesmas imagens que antes.
Basicamente estou a usar o S2midi+LoopBe1 (nao consegui instalar o midi yoke no vista).Estranho... eu descobri o midi yoke quando usava vista, e dava, cheguei a usar o loopbe1 primeiro, mas não gostei...
A minha ideia agora era fazer um keypad, a ver vamos se no final das férias tenha a cena encaminhada.
eu ando a estudar o caso para fazer um teclado midi tambem :Ptambém já passei por essa neura, mas já estou bem aviado com 1 de 49 e 2 de 88 teclas.. electronicamente, é fácil, pega-se num multiplexador de 16 canais, e faz-se uma matriz com X pinos do arduino,
tenho de arranjar um velho para "deitar as maos" :Dacabaste de me dar uma ideia do outro mundo :o
for (short i = 0; i < 16; i++){
PORTB = i;
valor_leitura[i] = analogRead(0);
}
porque é que é tão simples? porque como tenho os pinos do endereço do mux ligados aos pinos 8, 9, 10 e 11, uma maneira rápida de alterar-lhes o valor é escrever directamente para o porto B, que é o porto dos pinos 8 ao 13.oooh.. com a opção dos dois cores posta de lado, inviabiliza-se a aposta dos pinos de comunicação entre eles.. :P mt fraquinho.. mudaste d'ideias só pa n pagares o café e levares dois murros.. :D
fala dos tempos de 'reacção' do multiplexer e conta-nos ktas batidas o gajo 'come' por segundo.. ;) assusta-nos com numeros.. e põe o pessoal a treinar.. :D
agora é hora de chocapic e commandos ;D
Boa tarde como não sei se estou a conseguir enviar PM resolvi colocar aqui a mesma as minhas questões.
Peço desculpa colocar aqui as minhas questões como não vi nenhum tópico sobre buzzer´s e não vejo a necessidade de abrir um tópico só para isto.
Queria fazer um projecto com um buzzer e leds.
Buzzer para tocar a musica dos parabéns, mas não sei se ao brincar com os leds usando os delay interfere o ritmo da musica, alguém me pode dizer se interfere ou não?
E se alguém me pode arranjar um site onde possa retirar o código dessa musica?
Qual o buzzer a utilizar?
Não percebo nada de buzzer´s.
Cumprimentos
Fiz o que o Tcustodio aconselhou a fazer, mas acho que quem tem o direito de o ter feito seria o MicroByte.
Cumprimentos
Muito interessante este forum, Vou fazer uma bateria com Arduino + Mux shield. Baseando-se neste projeto abaixo com 48 entradas
http://blog.georgmill.de/e-drum-selbst-gebaut/ (http://blog.georgmill.de/e-drum-selbst-gebaut/)
Gostaria de saber como ele ligou os fios?
É como o mux do tcustodio? A0 A1 A2 A3 do mux -> ligados nos analog 1,2,3,4 do arduino?
Por favor me ajudem? obrigado
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fmayhewlabs.com%2Fmedia%2Fmux_shield_front.png&hash=45c8532c2fce88929ef0ad24964d5c22abd87929) | Ou seja, ao pores os pinos 2, 3, 4 e 5 do arduino em LOW, vais fazer com que cada multiplexador redireccione a sua entrada 0 para o arduino. Ao leres a porta analog 0 do arduino lês o M0 (multiplexador 0 do mux shield), no analog 1 lês o M1 e no analog 2 lês o M2. (imagem retirada da página do produto (http://mayhewlabs.com/products/arduino-mux-shield)) Para as conbinações das portas 2, 3, 4 e 5 que deves usar para ler cada canal, podes guiar-te pela imagem que tenho neste post: http://lusorobotica.com/index.php?topic=1237.msg12987#msg12987 (http://lusorobotica.com/index.php?topic=1237.msg12987#msg12987) |
tens é de fazer umas pcbs à maneira, pq projectos destes merecem melhor qualidade nas boards! ;)nunca pensei em desenhar uma pcb pra isto! mas tenho algumas ideias para um possível produto final :)
Já agora, eu sugeria que na vez de usar tampas de latas, é preferivel usar outros materiais menos sonoros, pk senao ha uma misturas de sons, do output do piezzo e o do som da lata...por isso é que nestes projectos, o pessoal usa almofadas ou materiais que tem abafar o som do bater das batutas...sim, eu sei, mas nunca encontrei nada a jeito :/ as tampas das latas foi o mais imediato que arranjei, mas pensando bem, podia pelo menos ter posto uma camada de esponja por cima!
Já agora Custódio, qtos piezos podias/podes usar na tua board?o número de piezos que posso usar é virtualmente ilimitado! basta adicionar mais multiplexadores! só experimentei com um de 16 canais, mas o mux shield supra mencionado trás logo 3 para um total de 48 portas!
(http://)Obrigado por responder, eu sou novo e entendo muito poucoOlá cellen :)
seria + ou - assim?
Se não fosse perguntar muito, Como eu faria as demais ligações entre arduino e Mux shield?Cellen, não há mais ligações a fazer! ao encaixares o mux shield no arduino já estás a estabelecer todas as ligações necessárias entre o shield e o arduino :)
Muito obrigado Tiago, Eu ví os fios e pensei que haveria alguma ligação entre o Mux e o Arduino.Não, cellen, não existe mais nenhuma ligação, na descrição do Mux Shield na sua página descreve que já está tudo ligado quando o encaixas no arduino. Todos esses fios que vês são as ligações para as tomadas onde vão ser ligados, posteriormente, os piezos!
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fblog.georgmill.de%2Fwp-content%2Fuploads%2F2011%2F03%2Fimg_6066.jpg&hash=f6f5bb4eaa3d1cbcb382e1699168d1babbf62616)
Se bem que o autor colocou um midi in e outSó é necessário uma ligação midi in/out se quiseres ligar a "bateria" a um dispositivo midi sem teres que usar o computador!
http://www.thebox.myzen.co.uk/Hardware/MIDI_Shield.html (http://www.thebox.myzen.co.uk/Hardware/MIDI_Shield.html)
Tiago, é necessário este midi in e out? fica ruim de usb para usb?
Não existem os ficheiros Eagle da placa, mas existe o esquema de ligações na página do produto, está tudo bem visível.n existem eagle files desse mux shield?.. 8)
Não existe não HUGU :(, Acho que é tão facil pra vocês que entendem, que deve parecer lógico. ::)
Pelo menos o autor diz que está tudo explicado no código.
http://blog.georgmill.de/2011/03/22/e-drumset-selbst-gebaut/ (http://blog.georgmill.de/2011/03/22/e-drumset-selbst-gebaut/)
nice, com o schematic ja dá pra passar pro eagle e fazer umas boards! ;)Sim, existe um MIDI shield, eu tenho-o :P
Qto ao "midi in/out", acho que existe um shield com isso...
e uma questão de montar literalmente no arduino 8)
Vou ver se trato das pcbs pra meter à disposiçao do ppl!..
Pensando em mudar de um kit para outro através de um toque, a minha idéia é que cada vez que o baterista tocar em certo pad, mudar o canal midi, e assim ter acesso a 16 kits, sem mexer no computador.Também acho que seja possível! É apenas uma questão de definires o canal como sendo uma variável e, durante as leituras dos pads, defines que ao sentires bater no pad X mudas a variável do canal :)
Assim através do REAPER, eu colocaria um kit em cada pista com o seu numero de canal midi - 0, 1, 2 etc
Acho que é possivel, o que você acham?
As entradas digitais do arduino 2,3,4,5 vão comandar A0,A1,A2,A3 (mux 0) , analog 0 -> Z(mux 0)Não. No MuxShield, podes ver que só são usados os pinos 2, 3, 4 e 5 para controlar os pinos A0, A1, A2 e A3 dos três multiplexadores :)
6,7,8,9 vão comandar A0,A1,A2,A3 (mux 1) , analog 1 -> Z(mux 1)
10,11,12,13 vão comandar A0,A1,A2,A3 (mux 2) , analog 2 -> Z(mux 2)
seria isto não é?:) ou não :( ?
opa Tiago, montei apenas com 6 analogicos pra testar.
Coloquei o teu codigo, da pagina 1 deste topico, mas a notaOff, não foi aceita na depuração. Ele diz que não foi declarada, etc (talvez porque os codigos do arduino versão 1.0 mudou algumas coisa)
coloquei depois aquele codigo da plaquinha vermelha http://www.spikenzielabs.com/SpikenzieLabs/DrumKitKit.html, (http://www.spikenzielabs.com/SpikenzieLabs/DrumKitKit.html,) e com algumas modificações, funcionou.
Mas deu trabalho. para ter pouca latência só daquele jeito mesmo: s2midi, midi yoke, e coloquei reaper com sf2.
porém quando bato, repetem as notas.
será porque os piezos estão dentro de livros?
Alguma idéia de codigo?
obrigado
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
Voltei a mexer na bateria. :D
porém agora ao ler o mux 16 canais (hef4067bp) quando bato no pad(0), os seguintes pads (1,2,3,4...) recebem valores que vão baixando :P
alguém sabe o porque? Será que está faltando alguma ligação no GND? algum aterramento?
Voltei a mexer na bateria. :Dna minha também acontecia isso às vezes, mas normalmente só no pad ao lado. Vê se isso te acontece se isolares o teu pad dos outros (põe-nos em sítios diferentes)
porém agora ao ler o mux 16 canais (hef4067bp) quando bato no pad(0), os seguintes pads (1,2,3,4...) recebem valores que vão baixando :P
alguém sabe o porque? Será que está faltando alguma ligação no GND? algum aterramento?
Voltei a mexer na bateria. :D
porém agora ao ler o mux 16 canais (hef4067bp) quando bato no pad(0), os seguintes pads (1,2,3,4...) recebem valores que vão baixando :P
alguém sabe o porque? Será que está faltando alguma ligação no GND? algum aterramento?
tens video?.. :)
Então Tiago, enquanto estava usando apenas as 6 entradas do arduino estava bem. fiz vários testes, pads juntos, separados, com madeira, metal, igual ao das Rolands Vséries :PVoltei a mexer na bateria. :Dna minha também acontecia isso às vezes, mas normalmente só no pad ao lado. Vê se isso te acontece se isolares o teu pad dos outros (põe-nos em sítios diferentes)
porém agora ao ler o mux 16 canais (hef4067bp) quando bato no pad(0), os seguintes pads (1,2,3,4...) recebem valores que vão baixando :P
alguém sabe o porque? Será que está faltando alguma ligação no GND? algum aterramento?
Então Tiago, enquanto estava usando apenas as 6 entradas do arduino estava bem. fiz vários testes, pads juntos, separados, com madeira, metal, igual ao das Rolands Vséries :P
Mas agora colocando o hef4067bp, parece que acontece um vazamento de voltagem no próprio Mux.
Já mexi bastante no código, mas eu acho que o código é o menor dos problemas.
Coloquei bastante resistência hoje e funcionou melhor, mas a resistência ao pulso do piezo também aumentou.
Acho que o sinal elétrico deve ser drenado mais rapidamente do mux através de algum esquema eletrico. Alguem tem alguma idéia? ::)
estou usando o seguinte esquema
piezo
resistor 1 M paralelo terra.
diodo schokkty série (retifica o sinal)
AmP op. Lm324( amplifica o sinal, com resistencia 20k em paralelo com saida e com terra)
hef4067bp
Arduino A0
Sem Amp Op o sinal não chega.
Boas Pessoal...
Aqui fica o prototipo do meu DrumKit.... Ainda está em desenvolvimento e como é obviu todas as sugestões são bem vindas...
Vou invadir um pouco o topico do grande tcustodio com o meu trabalho espero que gostem...
http://youtu.be/NlQFQLQEeyQ (http://youtu.be/NlQFQLQEeyQ)
Espero que possam dar sugestões e opinar sobre a "cenaça" :P
Cumps
AndréD.
Boas..
Antes de mais obrigado, e em relação a tua pergunta, os pads é que são porreiros, porque em relação á programação estou com uns problemas... Por exemplo não consigo tocar dois pads ao mesmo tempo... O que é totalmente impensável numa bateria... E não sei muito bem como eide resolver o problema...
Em relação ao encurtar os sons e varias batidas com sons diferentes isso esta a funcionar razoavelmente bem...
Cumps
AndréD.
//------------------------------------//
// CODE || SOUND //
// 35 || Bass Drum 2 //
// 36 || Bass Drum 1 //
// 37 || Side Stick/Rimshot //
// 38 || Snare Drum 1 //
// 39 || Hand Clap //
// 40 || Snare Drum 2 //
// 41 || Low Tom 2 //
// 42 || Closed Hi-hat //
// 43 || Low Tom 1 //
// 44 || Pedal Hi-hat //
// 45 || Mid Tom 2 //
// 46 || Open Hi-hat //
// 47 || Mid Tom 1 //
// 48 || High Tom 2 //
// 49 || Crash Cymbal 1 //
// 50 || High Tom 1 //
// 51 || Ride Cymbal 1 //
// 52 || Chinese Cymbal //
// 53 || Ride Bell //
// 54 || Tambourine //
// 55 || Splash Cymbal //
// 56 || Cowbell //
// 57 || Crash Cymbal 2 //
// 58 || Vibra Slap //
// 59 || Ride Cymbal 2 //
// 60 || High Bongo //
// 61 || Low Bongo //
// 62 || Mute High Conga //
// 63 || Open High Conga //
// 64 || Low Conga //
// 65 || High Timbale //
// 66 || Low Timbale //
// 67 || High Agogô //
// 68 || Low Agogô //
// 69 || Cabasa //
// 70 || Maracas //
// 71 || Short Whistle //
// 72 || Long Whistle //
// 73 || Short Güiro //
// 74 || Long Güiro //
// 75 || Claves //
// 76 || High Wood Block //
// 77 || Low Wood Block //
// 78 || Mute Cuíca //
// 79 || Open Cuíca //
// 80 || Mute Triangle //
// 81 || Open Triangle //
//------------------------------------//
int midiChannel = 9;
int outPin = 13;
int snare = 0;
int crash = 1;
int mtom = 2;
int ltom = 3;
int htom = 4;
int ride = 5;
int Bass = 2;
int DK1[6] = {38,49,43,47,50,51};
int DK2[6] = {40,57,41,45,48,59};
int lastAnalogSnare = 0;
int lastAnalogCrash = 0;
int lastAnalogMtom = 0;
int lastAnalogHtom = 0;
int lastAnalogLtom = 0;
int lastAnalogRide = 0;
int analogSmooth = 10;
void setup()
{
pinMode(Bass, INPUT);
Serial.begin(9600);
}
void loop()
{
int rsnare = 0;
int rcrash = 0;
int rmtom = 0;
int rltom = 0;
int rhtom = 0;
int rride = 0;
// Pedal do BASS
if (digitalRead(Bass) == LOW) {
noteOn(midiChannel,35,85);
delay(100);
noteOn(midiChannel,35,0);
}
// SNARE
rsnare = analogRead(snare)/8; // 0-1024 into 0-127
if (abs(rsnare-lastAnalogSnare) > analogSmooth) {
lastAnalogSnare = rsnare;
noteOn(midiChannel,DK2[0],rsnare);
}
// CRASH
rcrash = analogRead(crash)/8; // 0-1024 into 0-127
if (abs(rcrash-lastAnalogCrash) > analogSmooth) {
lastAnalogCrash = rcrash;
noteOn(midiChannel,DK2[1],rcrash);
}
// LTOM
rltom = analogRead(ltom)/8; // 0-1024 into 0-127
if (abs(rltom-lastAnalogLtom) > analogSmooth) {
lastAnalogLtom = rltom;
noteOn(midiChannel,DK2[2],rltom);
}
// MTOM
rmtom = analogRead(mtom)/8; // 0-1024 into 0-127
if (abs(rmtom-lastAnalogMtom) > analogSmooth) {
lastAnalogMtom = rmtom;
noteOn(midiChannel,DK2[3],rmtom);
}
// HTOM
rhtom = analogRead(htom)/8; // 0-1024 into 0-127
if (abs(rhtom-lastAnalogHtom) > analogSmooth) {
lastAnalogHtom = rhtom;
noteOn(midiChannel,DK2[4],rhtom);
}
// RIDE
rride = analogRead(ride)/8; // 0-1024 into 0-127
if (abs(rride-lastAnalogRide) > analogSmooth) {
lastAnalogRide = rride;
noteOn(midiChannel,DK2[5],rride);
}
}
void noteOn(byte channel, byte note, byte velocity) {
midiMsg(channel+0x90, note, velocity);
delay(50);
}
void midiMsg(byte cmd, byte data1, byte data2) {
digitalWrite(outPin,HIGH); // indicate we're sending MIDI data
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
digitalWrite(outPin,LOW);
}
Código: [Seleccione]//------------------------------------//
void noteOn(byte channel, byte note, byte velocity) {
midiMsg(channel+0x90, note, velocity);
delay(50);
}
Sei que o código está um pouco trapalhão mas isso depois arranja-se melhor... É que o tempo para estes projectos não e muito então tem de ser sempre a aviar... :P
Desde já muito obrigado pela ajuda...
Cumps
AndréD.
Boas Micro...Boas André.
Sim certo, mas por exemplo, se eu deixar o delay(50), nao consigo ter 2 toques (exemplo: bass e o Snare) ao mesmo tempo, ou pelo menos de forma a que "pareça" ser ao mesmo tempo, e se baixar o delay por exemplo para 10, toco no pad e acontece como se eu lá tivesse tocado 5+ vezes... Entendes?
Nao estou muito bem a ver como eide resolver a coisa... Ja estive a ver o código do TCustodio, mas não entendi grande coisa... :P
Agora é hora da JANTA... depois volto a pegar nisto... quero ver se deixo o prototipo acabado este fds para depois no próximo fazer uns pads maiores e os suportes e tal... Acabamentos vá...
Cumps
AndréD.
short nota[6] = {32, 34, 36, 37, 39, 41}; //aqui digo quais os sons que quero nos meus pads
short valor[6] = {0, 0, 0, 0, 0, 0}; //aqui guardo a intensidade com que bati em cada prato da última vez
long tempo[6] = {0, 0, 0, 0, 0, 0}; //aqui registo quando foi a última vez que bati em cada pad
short canal_bateria = 9;
short threshold = 10; //um limiar, se os valores lidos nos pads forem superiores a este, considero-os como batidas válidas
short debounce = 50; //isto é o tempo para esperar entre cada batida (é como o teu delay)
short pratos = 6;
short i = 0;
void setup() {
Serial.begin(31250);
}
até aqui tudo bem. Vou agora considerar um loop() simples:void loop() {
for(i = 0; i < pratos; i++){ //tudo acontecerá num ciclo que vai ler as 6 portas analógicas e vai processar tudo
valor[i] = analogRead(i)/8; //até aqui, tudo igual ao teu, leio o valor, divido-o por 8 e guardo-o
if (valor[i] > threshold){ //se o valor lido for superior ao limiar definido, então temos uma batida.
noteOn(canal_bateria, nota[i], valor[i] + offset);
}
}
}
vamos agora adicionar a parte que gere o tempo.if (valor[i] > threshold){
noteOn(canal_bateria, nota[i], valor[i] + offset);
tempo[i] = millis(); //aqui está. estou a guardar em que instante este pad sofreu impacto
}
Agora é só adicionar a condição para usar o tempo. Temos que ver quando é que a diferença entre o tempo actual e o tempo registado é superior ao tempo que queremos, neste caso 50ms.if ((valor[i] > threshold) && (millis() - tempo[i] >= debounce)){ //aqui está. só será uma batida válida se o valor for superior ao limiar E se o tempo decorrido desde a última batida for superior ao "debounce"
noteOn(canal_bateria, nota[i], valor[i] + offset);
tempo[i] = millis();
}
rride = analogRead(ride)/8; // change 0-1024 into 0-127
if ((rride > 10) && (millis() - tempo[5] >= 50)){ /
noteOn(midiChannel, DK2[5], rride);
tempo[5] = millis();
}
Algo como isto certo?
Agora isto quer é acabamentos :P
1. Para aumentar a sensibilidade do threshold, podes comparar directamente com o valor que vem da porta analógica (0-1023), em vez de andares a fazer sempre divisões. Só se ultrapassar o teu treshold é que mapeias para a gama 0-127 para enviar.Bem visto, micro, é uma operação completamente desnecessária! :)
2. Para diminuir o atraso entre envios consecutivos, em vez de divisão por 8 faz 3 shifts à direita. Se o compilador for bom é só isto que tem de fazer, mas desconfio que faça mais algumas contas desnecessárias. Quanto menos instruções low-level tiveres, mais rápido se torna o teu sistema.
O compilador optimiza divisões por potências de 2 para shifts, portanto é igual ter >> ou /.Acho que o melhor é compilar das duas maneiras e ver se o programa resultante tem o mesmo tamanho :D
e a latência tbm não ajuda
O compilador optimiza divisões por potências de 2 para shifts, portanto é igual ter >> ou /.Se é como dizes, é fixe então :) Não sabia disso...
Asio4all baixa a latencia consideravelmente, comparado ao driver multimedia, mas ainda vai conservar latencia que e audivel, e que para casos onde acuracia e necessaria( como gravar em overdub) ainda atrapalha um bom bocado. Mas claro esta que dependendo do DAW que utilizares, existem outras maneiras de dar a volta a isso, desde que seja uma latencia constante( o que e um bocado raro).e a latência tbm não ajuda
AdréD,
Não sei se conheces ou se já instalaste, mas uma maneira de baixar a latencia é usares o driver Asio4All (http://www.asio4all.com/)
AJUDA... noteOff(canal_bateria, nota); // PORQUE TÁ DANDO ERRO? TEM ALGO ERRADO?
void setup() {
Serial.begin(31250);
}
void loop() {
valor = (analogRead(i)/8);
if ((valor > threshold) && (millis() - tempo >= debounce)){
noteOff(canal_bateria, nota); // PORQUE TÁ DANDO ERRO?
noteOn(canal_bateria, nota, valor + offset);
tempo = millis();
}
i++;
if (i == pratos) i = 0;
}
void noteOn(byte channel, byte note, byte velocity) {
midiMsg(channel+0x90, note, velocity);
}
void midiMsg(byte cmd, byte data1, byte data2) {
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}
Não, eu usei um software que já tinha encontrado no início destas andanças:
http://www.memeteam.net/2007/s2midi/ (http://www.memeteam.net/2007/s2midi/)
usas isso e usas também o midi yoke, ou outro que te crie ligações midi virtuais:
http://www.midiox.com/myoke.htm (http://www.midiox.com/myoke.htm)
Não recomendo o uso do "Serial MIDI" da Spikenzie Labs, pois dá muita latência na devolução dos dados (mas permite dados nos dois sentidos, do computador para o arduino, enquanto que o S2MIDI não permite)
fiz o dowload do midiox,
instale tudo ok.
mas quando vou abrir aparece essa mensagem : there are no midi input devices.
o que será???
o arduino esta conectado no pc..
???
dê uma olhada na imagem... >>
o midiox está dando o mesmo erro... o s2midi está funcionado bem, quando eu toco no piezo ele responde..
abrir o fl studio e nada aconteceu...
obrigadoo
isso é bom! tou quase lá... amem!se configurares um ''cabo midi virtual'' no midi Yoke, não precisas do midiox para nada. configuras o s2midi para enviar os dados do arduino por um dos lados do ''cabo'' e configuras o FruityLoops para receber pelo outro lado do cabo!
mas o problema é que o midiox não aparece nada. e como eu configuro o midiox?
Tentei fazer o que voce me orientou tcustodio, mas não sei o que está dando errado...
não tá saindo som nenhum...
veja a imagem em anexo.
onde está o erro?
obrigado por sua atenção
ajudar...
estou com problemas na batida do piezo..
fiz tudo como tcustodio postou. tá igual o meu projeto.. mas observe, tem uma led TX na placa que não para de piscar, quando eu abro o FL STUDIO o sinal MIDI fica piscando aleatória com pisca na placa. eu toco no piezo e não sai o som ... mas sai o som no clique do sinal midi sem eu ter tocado no piezo...
e agora???
Refiz a montagem toda.. estou testando só com um piezo.. agora tá normal ( quando eu toco no piezo a placa acende o led tx normalmente sem os picas aleatórios). só não está saindo o som no programa.. baixei outro programa para fazer teste, e deu o mesma coisa, não sai som nenhum. o programa detecta algumas batidas mas não sai som ..
será que é alguma coisa referente as resistências? eu comprei resistências de 2.2 Mohms e díodos zenner de 5.1V
fiz como está no esquema postado por tcustodio.
o que fazer agora??
Testei no Albleton Live 8, não saiu nada, só ficou piscando... possa ser que o erro está em mim, como eu não sei como funciona o Albleton Live, então tou meio perdido..
tcustodio me oriente, por favor...
o s2midi eo midi ox , estão recebendo dados normalmente. o software no meu pc esta funcionando também normal, seleciono o instrumento e nada funciona...
não sei mais o que fazer...
vou orar a Deus!
Cubase
(por exemplo) tem um indicador luminoso que te deixa ver se esta a receber informacao midi (seja ela quaL FOR, ATE O RODAR DE UM POT com cut off por exemplo).
Isto se nao tiveres acesso a outras maneirtas de veres que mensagens estao a ser enviadas.
Mas o midi OX, se faz aquilo que diz, tb te deixara ver se esta a chegar alguma coisa ao PC ou nao !
quais os valores que tenho q inserir? S2 midi 9600 >> aumento para quanto? ou é o valor do Serial.begin(31250) que tenho que alterar?
obrigado pelas dicas..
obrigado está funcionado.. hehehe
só tem uma coisinha, as batidas não estão saindo em tempo real. de 5 toques no piezo, só sai 2 notas..
vc poderia me orienta mais uma vez??
desde já obrigado por sua paciência...
Jesus te abençoe
quais os valores que tenho q inserir? S2 midi 9600 >> aumento para quanto? ou é o valor do Serial.begin(31250) que tenho que alterar?Midi tem um baud rate de 31250
obrigado pelas dicas..
Cubase
(por exemplo) tem um indicador luminoso que te deixa ver se esta a receber informacao midi (seja ela quaL FOR, ATE O RODAR DE UM POT com cut off por exemplo).
Isto se nao tiveres acesso a outras maneirtas de veres que mensagens estao a ser enviadas.
Mas o midi OX, se faz aquilo que diz, tb te deixara ver se esta a chegar alguma coisa ao PC ou nao !
Sim, dá, mas não se torna útil para o teu caso.
Se queres simplesmente por a bateria a dar, a configuração mais básica que precisas é:
arduino->pc->s2midi->microsoft GS wavetable synth.
Com esta configuração, tendo o arduino a enviar mensagens para o canal 10 (canal da bateria em midi) tens que ouvir sons. Experimenta fazer o volume das mensagens midis ser máximo em vez de ser proporcional à força com que bates.
Se queres usar no Cubase, FruityLoops ou AbletonLive, a configuração será:
arduino->pc->s2midi->midi Yoke->o teu programa. não pode falhar.