El muteado de los pasos funciona de la siguiente manera. Mediante pulsadores, cambiamos el valor del mute de false a true y viceversa. Además, para evitar el efecto rebote, le añadimos una variable llamada ultimoTiempoBoton para que si la diferencia entre este y el tiempo en millis del arduino no es mayor a 250ms, no realice la acción.

Tambien, hemos convertido esos pulsadores en selectores para poder cambiar parametros como la octava, por lo que hemos tenido que diferenciar cuando el mute actua solo. Para eso, el efecto de muteado se da cuando se suelta el pulsador.

void checkMutes(){
	for (int i = 0; i < NUM_MUTES; i++) {
    bool mute = !digitalRead(mutesPin[i]);
		if (mute) {
      // Deteccion del mute y guardado de su estado
      if (mutePulsado[i] == false) {
        mutePulsado[i] = true;
        muteActivado = true;
        TiempoPulsadoBotonMute[i] = tiempoActualMillis;
        indexMovedMute = i;
      if (tiempoActualMillis - TiempoPulsadoBotonMute[i] > 100 && tiempoActualMillis - ultimoTiempoBotonMute[i] > 250) {
        ultimoTiempoBotonMute[i] = tiempoActualMillis;
      }
    }
    else {
      // --- SE ACABA DE LEVANTAR EL BOTÓN DEL MUTE ---
      if (mutePulsado[i] == true && !pulsedIndividualOctave && !octPlusPulsed && !octRestPulsed && !poteMovidoMutes) {
        if(menusUI.putNameFlag){charNumber[i] = 32;} // Si estamos en modo edicion de nombre, escribe un espacio, Sino cambia el valor del mute.
        if(s->seqMode == 0 && !menusUI.putNameFlag){stp[i].mutes = !stp[i].mutes;} 
        else if(s->seqMode == 1 && !menusUI.putNameFlag){stp[i].ccMutes = !stp[i].ccMutes;}

        drawUI.updateLCD = true;
        mutePulsado[i] = false;
        muteActivado = false;
      } 
    }
  }
}

Para que la nota no se dispare, comparamos el valor del mute en la posición en la que se encuentre nStep

if(!stp[nStep].mutes){
	MIDI.sendNoteOn(stp[nStep].note + (12 * stp[nStep].octave) + notaExterna, stp[nStep].velocity, id + 1);

Además, hemos añadido una pantalla en el LCD que nos indique en que parte de la secuencia estamos y si el paso está o no está muteado

  for (int i = 0; i < curTotalSteps; i++) {
    lcd.write(
      (stp[i].mutes) ? byte(5) : (i == SEQ.nStep) ? byte(7)     // 5 = Mute activo; 6 = Paso activado; 7 = Paso reproduciendose actualmente;
                                                  : byte(6));
  }

1770831721195.jpg