Arduino Forum

International => Français => Topic started by: vj_dobermann on Jul 09, 2017, 09:24 am

Title: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 09, 2017, 09:24 am
Bonjour à toutes et à tous,

je travaille sur un projet de contrôleur midi avec arduino.
En utilisant le code de cette page comme base : http://www.arduino.cc/en/Tutorial/MidiDevice (http://www.arduino.cc/en/Tutorial/MidiDevice)
mais je n'ai qu'un seul push bouton pour l'instant c'est pas important.

j'ai une erreur de compilation qui me dit :

/Users/vjdobermann/Documents/Arduino/push_button/push_button.ino:10:21: fatal error: MIDIUSB.h: No such file or directory
 #include "MIDIUSB.h"
                     ^
compilation terminated.
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Après plusieurs recherches sur internet je ne trouve pas de solution à mon problème, j'espère que vous pourriez m'aider.

Je suis sous OSX Sierra et Arduino 1.8.3

Un grand merci d'avance
Title: Re: erreur de compilation MIDIUSB.h
Post by: infobarquee on Jul 09, 2017, 09:40 am
bonjour,
Quote
fatal error: MIDIUSB.h: No such file or directory
la lib est bien présente dans le répertoire librairies?
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 09, 2017, 10:29 am
Bonjour,

alors non elle ne l'était pas, je croyais qu'elle était incluse par défaut...
j'ai fais une recherche, c'est bien cette lib ? : https://github.com/arduino-libraries/MIDIUSB

en recompilant avec, j'ai un autre message d'erreur :

In file included from /Users/vjdobermann/Documents/Arduino/push_button_midi/push_button_midi.ino:10:0:
/Users/vjdobermann/Documents/Arduino/libraries/MIDIUSB-master/src/MIDIUSB.h:18:2: error: #error MIDIUSB can only be used with an USB MCU.
 #error MIDIUSB can only be used with an USB MCU.

Merci d'avance

Title: Re: erreur de compilation MIDIUSB.h
Post by: iznobe on Jul 09, 2017, 12:04 pm
Bonjour , dans un premier temps , corriger une erreur de code sans voir le code , a moins d' etre devint releve d' un exploit , il existe des balises specifiques pour " envelopper et mettre en place VOTRE code dans le post . ( un lien vers un exemple ne suffit pas ) .

De plus avec la bibliothèque que vous nous avez nous linké a l ' air d ' avoir une mise en place specifique decrite dans le document : " README " .

Avez vous fait les manipulations decrites et les avez vous miseen place dans votre code ?

Title: Re: erreur de compilation MIDIUSB.h
Post by: kamill on Jul 09, 2017, 12:10 pm
Bonjour,

Soit ta librairie n'est pas compatible avec ta carte, soit tu n'a pas déclaré la bonne carte dans l'IDE.
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 09, 2017, 05:25 pm
Bonjour,
oui bien sur voilà le code que j'utilise :

Code: [Select]
#include <frequencyToNote.h>
#include <MIDIUSB.h>
#include <pitchToFrequency.h>
#include <pitchToNote.h>

/*
   This examples shows how to make a simple seven keys MIDI keyboard with volume control

   Created: 4/10/2015
   Author: Arturo Guadalupi <a.guadalupi@arduino.cc>
  
   http://www.arduino.cc/en/Tutorial/MidiDevice
*/


#define NUM_BUTTONS  7

const uint8_t button1 = 2;
const uint8_t button2 = 3;
const uint8_t button3 = 4;
const uint8_t button4 = 5;
const uint8_t button5 = 6;
const uint8_t button6 = 7;
const uint8_t button7 = 8;

const int intensityPot = 0;  //A0 input

const uint8_t buttons[NUM_BUTTONS] = {button1, button2, button3, button4, button5, button6, button7};
const byte notePitches[NUM_BUTTONS] = {C3, D3, E3, F3, G3, A3, B3};

uint8_t notesTime[NUM_BUTTONS];
uint8_t pressedButtons = 0x00;
uint8_t previousButtons = 0x00;
uint8_t intensity;

void setup() {
  for (int i = 0; i < NUM_BUTTONS; i++)
    pinMode(buttons[i], INPUT_PULLUP);
}


void loop() {
  readButtons();
  readIntensity();
  playNotes();
}

// First parameter is the event type (0x0B = control change).
// Second parameter is the event type, combined with the channel.
// Third parameter is the control number number (0-119).
// Fourth parameter is the control value (0-127).

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
}

void readButtons()
{
  for (int i = 0; i < NUM_BUTTONS; i++)
  {
    if (digitalRead(buttons[i]) == LOW)
    {
      bitWrite(pressedButtons, i, 1);
      delay(50);
    }
    else
      bitWrite(pressedButtons, i, 0);
  }
}

void readIntensity()
{
  int val = analogRead(intensityPot);
  intensity = (uint8_t) (map(val, 0, 1023, 0, 127));
}

void playNotes()
{
  for (int i = 0; i < NUM_BUTTONS; i++)
  {
    if (bitRead(pressedButtons, i) != bitRead(previousButtons, i))
    {
      if (bitRead(pressedButtons, i))
      {
        bitWrite(previousButtons, i , 1);
        noteOn(0, notePitches[i], intensity);
        MidiUSB.flush();
      }
      else
      {
        bitWrite(previousButtons, i , 0);
        noteOff(0, notePitches[i], 0);
        MidiUSB.flush();
      }
    }
  }
}

// First parameter is the event type (0x09 = note on, 0x08 = note off).
// Second parameter is note-on/note-off, combined with the channel.
// Channel can be anything between 0-15. Typically reported to the user as 1-16.
// Third parameter is the note number (48 = middle C).
// Fourth parameter is the velocity (64 = normal, 127 = fastest).

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
}


désolé si j'ai omis des info, j'ai rédigé un peu vite ce topic

dans le document README.adoc, il ne parle que de Linux.

Au début du fichier, il est mentionné que ça ne fonctionne qu'avec l'arduino 1.6.6, alors que j'ai la dernière version, la 1.8.3.

Je l'ai trouvé dans la page des releases mais c'est pareil le message d'erreur revient avec la 1.6.6
Title: Re: erreur de compilation MIDIUSB.h
Post by: Artouste on Jul 09, 2017, 05:29 pm
Bonjour
Tu utilise quoi comme type d'arduino ?
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 10, 2017, 01:19 pm
Bonjour,

j'utilise une Uno
Title: Re: erreur de compilation MIDIUSB.h
Post by: Artouste on Jul 10, 2017, 01:26 pm
Bonjour,

j'utilise une Uno
bonjour
cette lib n'est pas compatible avec un uno
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 10, 2017, 03:43 pm
oui c'est ce que je viens de constater malheureusement  :smiley-cry:  :smiley-cry:  :smiley-cry:

je continue mes recherches pour trouver un moyen que mon uno envoie du midi par usb.
Title: Re: erreur de compilation MIDIUSB.h
Post by: Artouste on Jul 10, 2017, 04:44 pm
oui c'est ce que je viens de constater malheureusement  :smiley-cry:  :smiley-cry:  :smiley-cry:

je continue mes recherches pour trouver un moyen que mon uno envoie du midi par usb.
Les 3 solutions les plus simples que j'utilise
- utiliser un adaptateur MIDI/USB (genre çà) (http://www.priceminister.com/offer?action=desc&aid=2669055313&productid=1740538398)
- deriver le driver MIDI sur le PC , perso j'utilise Hairless (http://projectgus.github.io/hairless-midiserial/)
- utiliser un digispark (mais ne fonctionne quepourdu MIDI-OUT)
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 10, 2017, 07:24 pm
Merci pour les 3 propositions, le premier lien ne fonctionne pas mais je vois ce que tu veux dire c'est un petit boitier avec un port usb d'un côté et deux prises midi de l'autre.

Je ne connaissais pas Hairless, heureusement il y a une version mac de dispo je testerai également ;)

Comme je programme pas mal avec Pure Data et Max Msp, j'ai également pensé recevoir le signal de l'arduino dans un patch PD ou Max pour le convertir en midi je testerai aussi cette magouille :smiley-mr-green:

http://fabacademy.org/archives/content/tutorials/12_Interface_and_Application_Programming/PD_to_Arduino_Over_Serial.html (http://fabacademy.org/archives/content/tutorials/12_Interface_and_Application_Programming/PD_to_Arduino_Over_Serial.html)

http://reactivemusic.net/?p=11809 (http://reactivemusic.net/?p=11809)
Title: Re: erreur de compilation MIDIUSB.h
Post by: Artouste on Jul 10, 2017, 10:02 pm
... le premier lien ne fonctionne pas

... Je ne connaissais pas Hairless, heureusement il y a une version mac de dispo je testerai également ;)
J'ai "réparé" le lien (problème récurent du forum :smiley-mr-green: )

Hairless est simple à utiliser (au moins sous windows)  , je l'ai utilisé recemment pour faire du test MIDI-IN et MIDI-OUT avec TRAKTOR .

Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 13, 2017, 03:15 pm
je viens de tester Hairless voici ce que je vois :

(https://www.dbr-prod.ch/images/capture_hairless.png)

ça fonctionne du premier coup, c'est awesome ce programme  :smiley-cool:

je crois que je vais même me casser la tête à codé un patch dans Max Msp, vu que ce programme est une solution clé en main sur win/mac :)
Title: Re: erreur de compilation MIDIUSB.h
Post by: vj_dobermann on Jul 13, 2017, 09:39 pm
est-ce que tu as déjà eu ce message d'erreur avec hairless ? :

(https://www.dbr-prod.ch/images/capture_hairless2.png)

j'ai changé les baud mais rien à faire... du coup mon signal midi n'arrive pas...
Title: Re: erreur de compilation MIDIUSB.h
Post by: Artouste on Jul 13, 2017, 10:01 pm
est-ce que tu as déjà eu ce message d'erreur avec hairless ? :

j'ai changé les baud mais rien à faire... du coup mon signal midi n'arrive pas...
Bonsoir
poste ton programme arduino
Title: Re: erreur de compilation MIDIUSB.h (RESOLU)
Post by: vj_dobermann on Jul 14, 2017, 07:12 pm
J'ai fait plusieurs recherche sur internet et j'ai vu que pas mal de personnes ont le même problème.
Avec le code ci-dessous, tout fonctionne impeccablement :

Code: [Select]
#include <MIDI.h>
#define LED 13

int pinBouton = 10; //declaration variable pour le port 10 digital



// Created and binds the MIDI interface to the default hardware Serial port
struct HairlessMidiSettings : public midi::DefaultSettings
{
   static const bool UseRunningStatus = false;
   static const long BaudRate = 115200;
};
MIDI_CREATE_CUSTOM_INSTANCE(HardwareSerial, Serial, MIDI, HairlessMidiSettings);

void setup()
{
    pinMode(pinBouton, INPUT); //mode lecture pour le bouton sur le port 10 digital
    pinMode(LED, OUTPUT); //declaration de l'allumage de la led sur l'arduino
    MIDI.begin(MIDI_CHANNEL_OFF); // pas d'entrée midi
}

void loop()
{
  boolean etatBouton = digitalRead(pinBouton); //lecture de l'etat du bouton et stockage dans etatBouton
  if (etatBouton==1) //test si le bouton est appuyé
  {
    digitalWrite(LED, 1);
    MIDI.sendControlChange(60, 60, 1);
  }
  if (etatBouton==0) //test si le bouton est levé
  {
  digitalWrite(LED, 0);
  MIDI.sendControlChange(60, 0, 1);
  }
  delay(100);
}


sur ma capture d'écran le CC est bien envoyé et reçu  ;) mon logiciel de vj'ing est contrôlé par le midi envoyé de l'arduino :)
(https://www.dbr-prod.ch/wp-content/uploads/wordpress/capture_hairless3.jpg)

Merci à tous de votre aide !!