Bonjour !
Voilà, je sèche un peu, je n'arrive pas à trouver une méthode digne de ce nom consistant à attendre un évènement et à réagir en fonction, le tout en utilisant des tableaux.
Je n'ai jamais utilisé de tableaux jusqu'à maintenant, d'où ma difficulté je pense. Mon choix d'utilisation de tableaux se porte justement sur le fait que je n'en ai jamais utilisé et que je souhaite essayer.
Pour faire simple, ce que je souhaite faire, c'est attendre qu'un bouton soit enfoncé, et si c'est le cas, qu'une note MIDI correspondant au bouton soit envoyé et qu'une LED soit allumé par la même occasion.
J'ai donc quelques questions :
- l'utilisation de tableaux est-elle judicieuse dans mon cas ?
- comment puis-je cleaner la partie " envoi des notes + allumage led en fonction du bouton enfoncé" ?
- mon code en l'état actuel est-il fonctionnel ? (je le saurai après test ça)
Voici pour le moment le code tel qu'il est sans avoir été testé :
#include <MIDI.h>
boolean bouton[] = {4, 6, 13, 19, 18}; // pins où sont connectés les boutons
boolean led[] = {11, 13, 15, 16, 17}; // pins où sont connectées les leds
void setup(){
Serial.begin(31250);
MIDI.begin();
// initialisation des entrées boutons
for (int i = 0; i < 5; i++){
pinMode(bouton[i], INPUT);
}
//initialisation des sorties leds
for (int i = 0; i < 5; i++){
pinMode(led[i], OUTPUT);
}
}
void loop(){
// mise au niveau BAS des boutons et des leds
for (int i = 0; i < 5; i++){
digitalWrite(bouton[i], LOW);
digitalWrite(led[i], LOW);
}
// envoi des notes + allumage led en fonction du bouton enfoncé
if (digitalRead(bouton[0] == HIGH)){
MIDI.sendNoteOn(40, 127, 1);
digitalWrite(led[0], HIGH);
delay(100);
digitalWrite(led[0], LOW);
}
if (digitalRead(bouton[1] == HIGH)){
MIDI.sendNoteOn(41, 127, 1);
digitalWrite(led[1], HIGH);
delay(100);
digitalWrite(led[1], LOW);
}
if (digitalRead(bouton[2] == HIGH)){
MIDI.sendNoteOn(42, 127, 1);
digitalWrite(led[2], HIGH);
delay(100);
digitalWrite(led[2], LOW);
}
if (digitalRead(bouton[3] == HIGH)){
MIDI.sendNoteOn(43, 127, 1);
digitalWrite(led[3], HIGH);
delay(100);
digitalWrite(led[3], LOW);
}
if (digitalRead(bouton[4] == HIGH)){
MIDI.sendNoteOn(44, 127, 1);
digitalWrite(led[4], HIGH);
delay(100);
digitalWrite(led[4], LOW);
}
}
Je pensai remplacer la partie actuelle "envoi des notes + allumage led en fonction du bouton enfoncé" par une simple boucle :
for (int i = 0; i < 5; i++){
if (digitalRead(bouton[i] == HIGH)){
MIDI.sendNoteOn(40 + i, 127, 1);
digitalWrite(led[i], HIGH);
delay(100);
digitalWrite(led[i], LOW);
}
Qu'en pensez-vous ?
Merci beaucoup d'avance ! ![]()