bonjour je suis entrain de faire un piano midi 44 notes j'utilise un Arduino micro pro et 3 séquenceur CD74HC4067 mais je souhaite utiliser la sortie USBMIDI mais j'ai une erreur dans mon code et je n'arrive pas a trouver comment faire, voici le problème
"MIDI.begin(); // Initialise la communication MIDI via USB".
je joins mon fichier
piano44notes.ino (1,7 Ko)
merci d'avance
poste le code ici avec les balises de code. Peu de participants voudront télécharger un fichier sur leur ordinateur
Bonsoir luc71160
Je pense qu'il y a "croisement" de bibliothèques, tu utilises MIDIUSB:
#include <MIDIUSB.h>
qui ne comprends pas de .begin();
(d'où l'erreur).
Tu devrais utiliser arduino_midi_library, qui a .begin();
Cordialement
jpbbricole
merci de ta réponse mais cela ne fonctionne pas, je viens de faire l'essaie cela me mets plus d'erreur donc je viens de changer j'ai mis MIDI_(); à la place de MIDI.begin(); et la compile ce fait bien sans erreur mais car il y a toujour quelque chose lors de téléchargement il se passe un truc avec le port comme s'il se déconnecte et se reconnecte ça me dit transfert réussi mais j'ai un message d'erreur que voici Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
je ne suis pas le seul a avoir ce problème, j'ai épluché quelques forums et c'est soit avec le micro pro ou le leonardo mais j'ai pas la solution.
Encore merci quand même.
Surement, par contre, on ne peut remplacer les librairies au petit bonheur la chance.
Chaque librairie fournis des fonctions, il faut vérifier laquelle on utilise et les fonctions fournis par celle-ci.
Par exemple la librairie arduino_midi_library, ne me semble pas fournis d'objet MidiUSB et je ne suis pas sûre non plus qu'elle fournisse une focntion sendMIDI.
Par contre MIDIUSB fournis un objet MidiUSB de type MIDI_ a bien une fonction sendMIDI.
Donc la question c'est d'ou vient cette instruction "MIDI.begin();", qui ne fournis pas d'objet MIDI et non plus de fonction being, comme l'a indiqué @jpbbricole ?
@luc71160 Il est plus simple d'aider lorsque l'on a les messages renvoyé par le compilateur, plutot que d'essayer de deviner ce qui ne va pas avec ton code
bonjours, a tous voici le message renvoyé par le compilateur " C:\Users\luc71160\Desktop\piano44notes\piano44notes.ino: In function 'void setup()':
C:\Users\luc71160\Desktop\piano44notes\piano44notes.ino:21:3: error: 'MIDI' was not declared in this scope
MIDI.begin(); // Initialise la communication MIDI via USB
^~~~
C:\Users\luc71160\Desktop\piano44notes\piano44notes.ino:21:3: note: suggested alternative: 'MIDI_'
MIDI.begin(); // Initialise la communication MIDI via USB
^~~~
MIDI_
exit status 1
Compilation error: 'MIDI' was not declared in this scope"
#include <MIDIUSB.h>
//#include <MIDI.h>
const int numMultiplexers = 3;
const int numPinsPerMultiplexer = 16;
const int numTotalPins = numMultiplexers * numPinsPerMultiplexer;
const int numKeys = 44;
byte noteOffset = 53; // Note de départ (FA)
byte addressPins[] = {3, 4, 5, 6};
byte sigPins[] = {A0, A1, A2};
byte midiChannel = 1;
void setup() {
for (int i = 0; i < numMultiplexers; i++) {
pinMode(addressPins[i], OUTPUT);
digitalWrite(addressPins[i], LOW);
}
MIDI.begin(); // Initialise la communication MIDI via USB
delay(1000); // Attendez une seconde pour que le périphérique USB soit prêt
}
void loop() {
for (int i = 0; i < numKeys; i++) {
int multiplexerIndex = i / numPinsPerMultiplexer;
int pinIndex = i % numPinsPerMultiplexer;
// Sélection du multiplexeur
for (int j = 0; j < numMultiplexers; j++) {
digitalWrite(addressPins[j], bitRead(multiplexerIndex, j));
}
pinMode(sigPins[multiplexerIndex], OUTPUT); // Configure la broche SIG comme sortie
digitalWrite(sigPins[multiplexerIndex], HIGH); // Active la résistance de tirage intégrée
int value = analogRead(sigPins[multiplexerIndex]);
if (value < 1000) { // Ajustez cette valeur en fonction de votre clavier
byte note = noteOffset + i;
midiEventPacket_t noteOn = {0x09, 0x90 | midiChannel, note, 127};
MidiUSB.sendMIDI(noteOn);
delay(100); // Temps de maintien de la note (ajustez selon vos besoins)
midiEventPacket_t noteOff = {0x08, 0x80 | midiChannel, note, 0};
MidiUSB.sendMIDI(noteOff);
delay(50); // Délai entre les notes (ajustez selon vos besoins)
}
pinMode(sigPins[multiplexerIndex], INPUT); // Réinitialise la broche SIG en tant qu'entrée
}
}
Il ne me semble pas avoir vu tes réponses à mes questions
Du coup, qu'es ce qui te pose probléme ?
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.