Advertisement
Guest User

Codigo Arduino

a guest
Apr 19th, 2014
864
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.89 KB | None | 0 0
  1. //  *****************************************************************************************************************
  2. //  *                                                                                                               *
  3. //  *                                     arduinodrum.wordpress.com                                                 *
  4. //  *                                                                                                               *
  5. //  *                                   Bateria Eletrônica com Arduino                                              *
  6. //  *                                         Diego Siena - 2014                                                    *
  7. //  *                                                                                                               *
  8. //  *****************************************************************************************************************
  9.  
  10. //  *****************************************************************************************************************
  11. //PRINCIPAIS NOTAS KIT EZ DRUMMER -> PADRÃO:                                                                        *
  12. //  *****************************************************************************************************************
  13. //Chimbal Fechado -> C#5/61;                                                                                        *
  14. //Tom Médio -> D4/50;                                                                                               *
  15. //Tom Grande -> F6/77;                                                                                              *
  16. //Surdo -> D6/74;                                                                                                   *
  17. //Bumbo -> C3/36;                                                                                                   *
  18. //Ataque (esquerda) -> C#4/49;                                                                                      *
  19. //Cúpula Condução -> C#7/85;                                                                                        *
  20. //Condução -> C7/84;                                                                                                *
  21. //Ataque (direita) -> E4/52;                                                                                        *
  22. //Caixa -> D3/38;                                                                                                   *
  23. //  *****************************************************************************************************************
  24.  
  25. //*******************************************************************************************************************
  26. // Variáveis de Definição do Usuário.                      
  27. //*******************************************************************************************************************
  28.  
  29. unsigned char PadNote[1] = {38};         // Notas MIDI - 0 a 127
  30.  
  31. int PadCutOff[1] = {400};           // Valor Mínimo do Sensor para causar o som
  32.  
  33. int MaxPlayTime[1] = {60};               // Ciclos a passar antes da Segunda Batida ser acionada.
  34.  
  35. #define  midichannel    0                              // Canal Midi
  36.  
  37. boolean VelocityFlag  = true;                           // Se o som será de acordo com a intensidade da Batida.
  38.  
  39. //*******************************************************************************************************************
  40. // Variáveis de uso Interno                  
  41. //*******************************************************************************************************************
  42.  
  43. boolean activePad[1] = {0};                   // Salva se os pads estao ativos ou nao.
  44. int PinPlayTime[1] = {0};                     // Contador dos ciclos desde que o pad foi acionado.
  45.  
  46. unsigned char status;
  47.  
  48. int pin = 0;    
  49. int hitavg = 0;
  50.  
  51. //*******************************************************************************************************************
  52. // Setup                      
  53. //*******************************************************************************************************************
  54.  
  55. void setup()
  56. {
  57.   Serial.begin(57600);                              
  58. }
  59.  
  60. //*******************************************************************************************************************
  61. // Main Program                
  62. //*******************************************************************************************************************
  63.  
  64. void loop()
  65. {
  66.  
  67.  
  68.   for(int contador = 0; contador < 1; contador++) // Percorre os Pinos Analógicos
  69.   {
  70.     hitavg = analogRead(pin);  // Lê o Valor do Sensor                            
  71.  
  72.     if((hitavg > PadCutOff[pin]))  // Verifica se o valor pego pelo sensor é maior que o Valor minimo para causar o Som
  73.     {
  74.       //Serial.println(hitavg);
  75.      
  76.       if((activePad[pin] == false))  // Verifica se o Pad já está sendo executado.
  77.       {
  78.         if(VelocityFlag == true)  // Verifica se o som será de acordo com a Intensidade da Batida, para gerar o Sinal Midi.
  79.         {
  80.           hitavg = (hitavg / 4) -1 ; // Divide valor do piezo para que seja um valor de 0 à 127.
  81.         }
  82.         else
  83.         {
  84.           hitavg = 127;
  85.         }
  86.  
  87.         MIDI_TX(144,PadNote[pin],hitavg); // Executa nota MIDI
  88.         MIDI_TX(128,PadNote[pin],127); // Seta nota MIDI como OFF, para parar a reprodução de som.
  89.         PinPlayTime[pin] = 0;  //Seta o Ciclo para '0'.
  90.         activePad[pin] = true; // Altera o Pad para Ativo. Quando ativo, é porque já foi executada nota MIDI.
  91.       }
  92.       else // Verifica se pad está ativo, se estiver, adiciona 1 ao contador de ciclos.
  93.       {
  94.         PinPlayTime[pin] = PinPlayTime[pin] + 1; // Caso o Pad ja esteja ativo, incrementa 1 Ciclo.
  95.       }
  96.     }
  97.     else if((activePad[pin] == true)) // Se valor do piezo for menor que o mínimo para ativar o pad,
  98.                                       // verifica se pad está em uso (ativo).
  99.     {
  100.       PinPlayTime[pin] = PinPlayTime[pin] + 1; // Adiciona 1 ao contador de ciclos.
  101.      
  102.       if(PinPlayTime[pin] > MaxPlayTime[pin]) // Verifica se contador atingiu o limite do ciclo.
  103.       {
  104.         activePad[pin] = false; // Torna o pad inativo, indicando que está pronto para receber outro golpe
  105.                                 // e executar outra nota MIDI.        
  106.       }
  107.     }
  108.   }
  109. }
  110.  
  111.  
  112. //*******************************************************************************************************************
  113. // Função que transmite o MIDI                      
  114. //*******************************************************************************************************************
  115. void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY)
  116. {
  117.   status = MESSAGE + midichannel;
  118.   Serial.write(status);
  119.   Serial.write(PITCH);
  120.   Serial.write(VELOCITY);
  121.  
  122.   //Serial.print("Velocity -> ");
  123.   //Serial.println(VELOCITY);
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement