Erreur code pour piano midi 44 notes

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 :frowning:

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 :frowning:

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.