Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // *****************************************************************************************************************
- // * *
- // * arduinodrum.wordpress.com *
- // * *
- // * Bateria Eletrônica com Arduino *
- // * Diego Siena - 2014 *
- // * *
- // *****************************************************************************************************************
- // *****************************************************************************************************************
- //PRINCIPAIS NOTAS KIT EZ DRUMMER -> PADRÃO: *
- // *****************************************************************************************************************
- //Chimbal Fechado -> C#5/61; *
- //Tom Médio -> D4/50; *
- //Tom Grande -> F6/77; *
- //Surdo -> D6/74; *
- //Bumbo -> C3/36; *
- //Ataque (esquerda) -> C#4/49; *
- //Cúpula Condução -> C#7/85; *
- //Condução -> C7/84; *
- //Ataque (direita) -> E4/52; *
- //Caixa -> D3/38; *
- // *****************************************************************************************************************
- //*******************************************************************************************************************
- // Variáveis de Definição do Usuário.
- //*******************************************************************************************************************
- unsigned char PadNote[1] = {38}; // Notas MIDI - 0 a 127
- int PadCutOff[1] = {400}; // Valor Mínimo do Sensor para causar o som
- int MaxPlayTime[1] = {60}; // Ciclos a passar antes da Segunda Batida ser acionada.
- #define midichannel 0 // Canal Midi
- boolean VelocityFlag = true; // Se o som será de acordo com a intensidade da Batida.
- //*******************************************************************************************************************
- // Variáveis de uso Interno
- //*******************************************************************************************************************
- boolean activePad[1] = {0}; // Salva se os pads estao ativos ou nao.
- int PinPlayTime[1] = {0}; // Contador dos ciclos desde que o pad foi acionado.
- unsigned char status;
- int pin = 0;
- int hitavg = 0;
- //*******************************************************************************************************************
- // Setup
- //*******************************************************************************************************************
- void setup()
- {
- Serial.begin(57600);
- }
- //*******************************************************************************************************************
- // Main Program
- //*******************************************************************************************************************
- void loop()
- {
- for(int contador = 0; contador < 1; contador++) // Percorre os Pinos Analógicos
- {
- hitavg = analogRead(pin); // Lê o Valor do Sensor
- if((hitavg > PadCutOff[pin])) // Verifica se o valor pego pelo sensor é maior que o Valor minimo para causar o Som
- {
- //Serial.println(hitavg);
- if((activePad[pin] == false)) // Verifica se o Pad já está sendo executado.
- {
- if(VelocityFlag == true) // Verifica se o som será de acordo com a Intensidade da Batida, para gerar o Sinal Midi.
- {
- hitavg = (hitavg / 4) -1 ; // Divide valor do piezo para que seja um valor de 0 à 127.
- }
- else
- {
- hitavg = 127;
- }
- MIDI_TX(144,PadNote[pin],hitavg); // Executa nota MIDI
- MIDI_TX(128,PadNote[pin],127); // Seta nota MIDI como OFF, para parar a reprodução de som.
- PinPlayTime[pin] = 0; //Seta o Ciclo para '0'.
- activePad[pin] = true; // Altera o Pad para Ativo. Quando ativo, é porque já foi executada nota MIDI.
- }
- else // Verifica se pad está ativo, se estiver, adiciona 1 ao contador de ciclos.
- {
- PinPlayTime[pin] = PinPlayTime[pin] + 1; // Caso o Pad ja esteja ativo, incrementa 1 Ciclo.
- }
- }
- else if((activePad[pin] == true)) // Se valor do piezo for menor que o mínimo para ativar o pad,
- // verifica se pad está em uso (ativo).
- {
- PinPlayTime[pin] = PinPlayTime[pin] + 1; // Adiciona 1 ao contador de ciclos.
- if(PinPlayTime[pin] > MaxPlayTime[pin]) // Verifica se contador atingiu o limite do ciclo.
- {
- activePad[pin] = false; // Torna o pad inativo, indicando que está pronto para receber outro golpe
- // e executar outra nota MIDI.
- }
- }
- }
- }
- //*******************************************************************************************************************
- // Função que transmite o MIDI
- //*******************************************************************************************************************
- void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY)
- {
- status = MESSAGE + midichannel;
- Serial.write(status);
- Serial.write(PITCH);
- Serial.write(VELOCITY);
- //Serial.print("Velocity -> ");
- //Serial.println(VELOCITY);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement