Batteria elettronica

salve a tutti
mi trovo alle prima armi con arduino, e vorrei gentilmente spiegato meglio il seguente sketch, in quanto non sono riuscito a comprenderlo. In pratica l’ho trovato girovagando in rete ed è lo sketch del progetto di una batteria elettronica midi che usa dei piezi come segnale input analogico per poi far eseguire ad un programma dei suoni.il sito da cui l’ho preso http://spikenzielabs.com/SpikenzieLabs/DrumKitKit.html usa un kit ma io preferisco comprare separatamente i componenti, inoltre fornisce un prgramma per convertire da midi in seriale.non so quali collegamenti fare e mi servirebbe una mano, grazie in anticipo :smiley:

//*******************************************************************************************************************
// User settable variables 
//*******************************************************************************************************************

unsigned char PadNote[6] = {52,16,66,63,40,65};         // MIDI notes from 0 to 127 (Mid C = 60)

int PadCutOff[6] = {600,600,600,600,600,600};           // Minimum Analog value to cause a drum hit

int MaxPlayTime[6] = {90,90,90,90,90,90};               // Cycles before a 2nd hit is allowed

#define  midichannel 0;                              // MIDI channel from 0 to 15 (+1 in "real world")

boolean VelocityFlag  = true;                           // Velocity ON (true) or OFF (false)





//*******************************************************************************************************************
// Internal Use Variables 
//*******************************************************************************************************************

boolean activePad[6] = {0,0,0,0,0,0};                   // Array of flags of pad currently playing
int PinPlayTime[6] = {0,0,0,0,0,0};                     // Counter since pad started to play

unsigned char status;

int pin = 0;     
int hitavg = 0;

//*******************************************************************************************************************
// Setup 
//*******************************************************************************************************************

void setup() 
{
 Serial.begin(57600);                                  // connect to the serial port 115200
}

//*******************************************************************************************************************
// Main Program 
//*******************************************************************************************************************

void loop() 
{
 for(int pin=0; pin < 6; pin++)
 {
   hitavg = analogRead(pin);                              // read the input pin

   if((hitavg > PadCutOff[pin]))
   {
     if((activePad[pin] == false))
     {
       if(VelocityFlag == true)
       {
//          hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin]));    // With full range (Too sensitive ?)
         hitavg = (hitavg / 8) -1 ;                                                 // Upper range
       }
       else
       {
         hitavg = 127;
       }

       MIDI_TX(144,PadNote[pin],hitavg); 
       PinPlayTime[pin] = 0;
       activePad[pin] = true;
     }
     else
     {
       PinPlayTime[pin] = PinPlayTime[pin] + 1;
     }
   }
   else if((activePad[pin] == true))
   {
     PinPlayTime[pin] = PinPlayTime[pin] + 1;
     
     if(PinPlayTime[pin] > MaxPlayTime[pin])
     {
       activePad[pin] = false;
       MIDI_TX(128,PadNote[pin],127); 
     }
   }
 } 
}


//*******************************************************************************************************************
// Transmit MIDI Message 
//*******************************************************************************************************************
void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY) 
{
 status = MESSAGE + midichannel;
 Serial.print(status);
 Serial.print(PITCH);
 Serial.print(VELOCITY);
}

Prima che arrivi nid a tirarti le orecchie (stavolta ti ho preceduto, nid, :P :D) o un mod a sgridarti, dovresti presentarti nell'apposito topic ... e mettere il codice nei tag CODE, cosi occupano meno spazio sulla pagina :)

Eccomi :grin: Scusa @eteme per il doppio msg:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Nid, prima o poi ti farò togliere almeno 2K di messaggi, ho l'impressione che siano tutti uguali, ed identici a questo qui sopra... :smiling_imp:

leo72: Nid, prima o poi ti farò togliere almeno 2K di messaggi, ho l'impressione che siano tutti uguali, ed identici a questo qui sopra... :smiling_imp:

Preciso, preciso :grin: Si presenta bene però !!!

P.S. lo copio da uno precedente memorizzato, stamattina in questo thread l'ho copiato e dopo il salva ad ogni riga il sistema aveva aggiunto una riga vuota (non solo prima e dopo paragrafo, ma ad ogni riga). Han cambiato qualcosa nel forum ? Conviene cancellare cache ?

Grazie nid, e scusa la mia ignoranza al riguardo del funzionamento del forum. Ho fatto e letto tutto.