MIDI Drum set problem

Hello,

i'm trying to make a drum set. The original code is this:

int noteOn = 144;
int piezo = A0;
int threshold = 50;//anything over fifty means we've hit the piezo

void setup(){
  Serial.begin(9600);
}

void loop(){
  int piezoVal = analogRead(piezo);
  if (piezoVal>threshold){
    MIDImessage(noteOn, 60, 127);
    delay(300);
    MIDImessage(noteOn, 60, 0);
  }
}

//send MIDI message
void MIDImessage(byte command, byte data1, byte data2) {
  Serial.write(command);
  Serial.write(data1);
  Serial.write(data2);
}

On the analog input is connected some piezoelectric sensor, one for every entrance. Arduino sample the signal, compares it to a threshold and if the signal is higher than the threshold, send a MIDI note via USB

int noteOn = 144;
int soglia = 50;//qualunque valore sopra 50 significa che è stato toccato il piezosensore

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int piezoVal1 = analogRead(A0);
  int piezoVal2 = analogRead(A1);
  int piezoVal3 = analogRead(A2);
  int piezoVal4 = analogRead(A3);
  int piezoVal5 = analogRead(A4);
  int piezoVal6 = analogRead(A5);
  
  if (piezoVal1 > soglia)
  {
      MIDImessage(noteOn, 60, 127);// Invia il messagio di nota ON
      delay(300);
      MIDImessage(noteOn, 60, 0); // Invia il messaggio di nota OFF
  }
  
  if (piezoVal2 > soglia)
  {
      MIDImessage(noteOn, 70, 127);// Invia il messagio di nota ON ma con un altra tonalità
      delay(300);
      MIDImessage(noteOn, 70, 0); // Invia il messaggio di nota OFF
  }
  
  if (piezoVal3 > soglia)
  {
      MIDImessage(noteOn, 80, 127);
      delay(300);
      MIDImessage(noteOn, 80, 0); // Invia il messaggio di nota OFF
  }

  if (piezoVal4 > soglia)
  {
      MIDImessage(noteOn, 90, 127);
      delay(300);
      MIDImessage(noteOn, 90, 0); // Invia il messaggio di nota OFF
  }
  
  /*if (piezoVal5 > soglia)
  {
      MIDImessage(noteOn, 100, 127);
      delay(300);
      MIDImessage(noteOn, 100, 0); // Invia il messaggio di nota OFF
  }
  
  if (piezoVal6 > soglia)
  {
      MIDImessage(noteOn, 110, 127);
      delay(300);
      MIDImessage(noteOn, 110, 0); // Invia il messaggio di nota OFF
  }*/
}

//invia il messaggio MIDI
void MIDImessage(byte command, byte data1, byte data2)
{
  Serial.write(command);//invia comando "nota on" oppure "nota off"
  Serial.write(data1);//invia i dati di tono
  Serial.write(data2);//invia i dati di velocità
}

I tried to increase piezoelectric sensors from 1 to 6. my problem is that there is always a steady beat nonhardly I turn it on. The LED "on" and the LED "L" are turned on, while LED "RX" constantly flashes

Do you have pull-down resistors? If not, you are probably getting spurious values from the pins. SF wrote a tutorial on Piezo Drum Kits.

Your code would be easier to maintain if you used arrays. I rewrote it with arrays and will post it below. It prints out the values of the analog pins, of course you would have to remove the serial prints and uncomment the MIDI writes to play notes.

When I run this code on a Mega with nothing attached to the analog pins each one reads over 50.

int noteOn = 144;
int soglia = 50;//qualunque valore sopra 50 significa che è stato toccato il piezosensore

byte piezoPins[] = {A0, A1, A2, A3, A4, A5};
byte piezoVals[sizeof(piezoPins)];
byte firstNote = 60;

void setup()
{
  Serial.begin(9600);

}

void loop()
{
  // read each pin
  for(int i=0; i < sizeof(piezoPins); i++)
  {

    // get analog value
    piezoVals[i] = analogRead(piezoPins[i]);
    Serial.print("Piezo "); Serial.print(i); Serial.print(" val = ");Serial.println(piezoVals[i]);

    // if over threshold
    if( piezoVals[i] > soglia )
    {
      // play note
     // MIDImessage(noteOn, firstNote + (10*i), 127);// Invia il messagio di nota ON
      delay(300);
    //  MIDImessage(noteOn, firstNote + (10*i), 0); // Invia il messaggio di nota OFF      
    }
    
  }
 
}

//invia il messaggio MIDI
void MIDImessage(byte command, byte data1, byte data2)
{
  Serial.write(command);//invia comando "nota on" oppure "nota off"
  Serial.write(data1);//invia i dati di tono
  Serial.write(data2);//invia i dati di velocità
}

Yes, i pull-down the resistors. Now i put the gruond to A4 and A5 (i don’t use them) and RX don’t blik but still always on and work reverse. Whe i tap the piezo RX is off, and after go on. (i’ts whit your code)
P.S. I use arduino uno and hairless