Utiliser switch() {case: }

Bonjour,
Je vous présente rapidement mon projet histoire d’avoir un peu de contexte…
Je cherche à réaliser un contrôleur MIDI avec 16 boutons simples connectés à un Arduino Leonardo pour contrôler une machine à percussions virtuelle.
J’ai donc utilisé la librairie MidiUSB, et j’ai voulu utiliser des balises if et else pour faire quelque chose du style :
Si bouton 1 appuyé, alors note 1 ON, sinon note 1 OFF
Si bouton 2 appuyé, alors note 2 ON, sinon note 2 OFF
etc…

Mais je ne sais pas si avec cette méthode on peut convenablement jouer plusieurs sons en même temps, et j’ai entendu parler des “balises” switch et case, donc j’aimerais savoir comment les utiliser dans mon cas, autrement dit la lecture de la valeur d’un bouton et l’action qui y est liée, et ce pour 16 boutons, et donc 16 actions différentes (note ON) et leur complément lorsque le bouton n’est pas appuyé (note OFF).

Je suis débutant donc j’espère que vous aurez globalement compris mon problème.

Cordialement.

Étant donné que les boutons sont indépendants entre eux (pas de « if () {} else if () {} else if () {} else if () {} else {} » imbriqués mais juste des « if () {} else {}»indépendants qui se succèdent) le switch case n’est pas vraiment approprié (saut à représenter d’un coup 8 ou 16 boutons si vous ne voulez pas de micros délais entre les déclenchements et en utilisant les PORTS mais ça fait un très gros switch alors...)

Très bien donc je fait comme ça sur les 16 boutons ?
C'est à dire que j'aimerais que si j'appuie sur deux boutons en même temps, deux infos midi partent (même s'il y a quelques millisecondes de décalage imperceptibles)

//Bouton 1
  if(S1==HIGH){
    Serial.println("Note on");
    noteOn(0, 48, 127); //Canal 0(1), Note C, Velocité 127
    MidiUSB.flush();
    }
  else{
    Serial.println("Note off");
    noteOff(0, 48, 127); //Canal 0(1), Note C, Velocité 127
    MidiUSB.flush();
//Bouton 2
  if(S2==HIGH){
    Serial.println("Note on");
    noteOn(0, 50, 127); //Canal 0(1), Note D, Velocité 127
    MidiUSB.flush();
    }
  else{
    Serial.println("Note off");
    noteOff(0, 50, 127); //Canal 0(1), Note D, Velocité 127
    MidiUSB.flush();
  }

Oui éventuellement faire un seul flush à la fin, et éviter les print si vous voulez rester le plus synchro possible [edit -> et bien sûr déclencher qu’une fois lors de l’appui pas tout le temps]

clemboss:
Si bouton 1 appuyé, alors note 1 ON, sinon note 1 OFF
Si bouton 2 appuyé, alors note 2 ON, sinon note 2 OFF

Ton algorithme est faux.

Tant que tu tiens un bouton appuyé, tu envoie des rafales de messages MIDI "Note On", probablement plus vite que le MIDI ne peut transmettre.
Si tu lâches le bouton, c'est pareil, tu envoie des rafales de Note OFF. ET pour tous les boutons relâchés !!

Il manque une variable d'état, pour chaque note.
Tu dois mémoriser, pour chaque note, si est est - en ce moment - en train de jouer.

bool Do_joue = false;
.../...
if ( bouton_Do appuyé && Do_joue == false ) {
  Envoyer Note ON Do
  Do_joue = true;
}
if ( bouton_Do lâché && Do_joue == true ) {
  Envoyer Note OFFDo
  Do_joue = false;
}

Il faut faire ça pour chaque note, donc je te conseille d'utiliser un tableau.
Et attention au rebonds des boutons...

Oui tout à fait faut être plus précis Sur l’appui et la relâche pas juste l’état de la touche a un instant t