Arduino personnalisé MIDI Controller (13 / 14 étapes)

Étape 13 : La bibliothèque

Dans l’intro de ce Instructable, je vous ai promis un moyen facile de programmer votre propre contrôleur MIDI. Eh bien, ici c’est !

C’est une bibliothèque qui cherche à faire des compromis entre les grandes possibilités de personnalisation et de code facile à utiliser, accessible pour les débutants de l’Arduino.

Actuellement, il prend en charge des encodeurs rotatifs, commutateurs, potentiomètres, boutons, potentiomètres et dispose d’une fonction simple d’envoyer des commandes MIDI.
J’ai l’intention d’ajouter plus de sortie LED et prise en charge du contrôle du Pitch Bend dans un proche avenir.

Installation de la bibliothèque de MIDI_controller

Cette bibliothèque s’appuie sur les fonctionnalités MIDI du logiciel nous avons installé plus tôt (Teensyduino, TeeOnArdu, HIDUINO etc.) donc rentrer à l’étape 6 et 8 et les installer. Ne vous découragez pas par la procédure d’installation apparemment long, si vous suivez les instructions, vous devriez être bien. Une fois que tout est mis en place, c’est vraiment facile à utiliser !

La bibliothèque de MIDI_controller s’est installée comme n’importe quelle autre bibliothèque Arduino.

Ce sont les instructions pour IDE Arduino 1.0.6 :

  1. Télécharger la bibliothèque ici.
  2. Dans le menu 'Sketch', cliquez sur "Importbibliothèque..." , puis ' Ajouter bibliothèque...'.
  3. Accédez à votre répertoire de téléchargement et double-cliquez dessus dans la colonne de droite, sélectionnez MIDI_controller.zip.
  4. Cliquez sur « Ok ».
  5. Redémarrez l’IDE pour charger les mots clés (si vous obtenez la couleur orange pour les fonctions etc.).

C’est tout.

Comment l’utiliser

Tout d’abord ajouter la bibliothèque à votre croquis en tapant simplement cette ligne en haut de votre fichier :

La bibliothèque possède actuellement 4 classes : analogiques, numériques, DigitalLatch et encodeur.

Une classe possède un ensemble de fonctions et un ensemble de variables. Certains sont privés et sont utilisés à l’intérieur de la classe, d’autres sont publiques et peut être appelées à partir en dehors de la classe. Plus sur les classes ici.

La première étape en utilisant une classe crée un membre de la classe. Ceci est principalement fait avant l’installation, donc vous pouvez utiliser les membres de partout dans le programme.

Par exemple, permet d’ajouter un membre « potentiomètre » de la classe analogique :
Analogique potentiomètre (bla, bla, bla...) ;
(Ignorez le bla pour l’instant)

Maintenant que le membre est créé, nous pouvons utiliser les fonctions d’analogue à ce sujet, par exemple, la fonction de rafraîchissement :
potentiometer.refresh() ;
Comme fonctions Arduino comme digitalWrite, vous ne pouvez pas utiliser ces fonctions à l’extérieur de l’installation ou la boucle.

Pour l’explication de ce que les fonctions faire et ce qu’ils sont faits, lire la suite.

Analog

La classe analogique est conçue pour les entrées analogiques, comme les potentiomètres et faders (ou capteurs analogiques que générer une valeur comprise entre 0 et 5V). Un numéro de NIP invalide entraînera la LED clignote 13 broches à 1Hz.

Créer des membres

  • Analogique (broche octets, contrôleur de l’octet, canal de byte, résolution octets) ;

la broche est la broche analogique pour lire à partir. Il est relié au curseur du potentiomètre.

contrôleur est le numéro du contrôleur MIDI (données 1 dans le message de MIDI). C’est comment il s’affichera dans votre logiciel de MIDI, comme une adresse unique.

canal est le canal du MIDI.

la résolution est la résolution de l’analogue de lecture. Une résolution de 2 donnerait seulement 2 valeurs possibles (0 à 127), une résolution de 3 donnerait 3 valeurs possibles (0, 63 et 127). Une résolution de 128 donne 128 valeurs possibles (0-127), c’est la valeur par défaut, parce que c’est tous 7bits numéros. (MIDI utilise des nombres 7 bits pour l’envoi de valeurs) Utiliser une valeur inférieure à 128, comme 64, s’il y a beaucoup de bruit sur votre entrée, par exemple, si le régulateur maintient envoi 0,1,0,1,0,1,0,1,... Utilisez 128 si vous souhaitez utiliser la résolution maximale disponible.

Fonctions

  • Refresh() ;

Cette fonction vérifie l’entrée, et si elle a changé depuis le dernier appel de rafraîchissement, elle envoie la nouvelle valeur sur MIDI (sur le numéro du contrôleur prédéfinis et canal).

  • Banque (broche octets, contrôleur de l’octet, canal octets) ;

Cette fonction vous permet d’utiliser une entrée analogique (avec un commutateur) pour plusieurs contrôles. Si l’interrupteur est à l’arrêt du poste, le contrôleur et le canal seront ceux qui ont été définis lors de la création du membre, si le commutateur est en position ON, le contrôleur et le canal seront ceux qui ont été introduites en tant qu’arguments de cette fonction.

la broche est la broche numérique avec le commutateur connecté. La résistance de pull-up interne sera activée.

contrôleur est le contrôleur à utiliser lorsque le commutateur est allumé.

canal est le canal à utiliser lorsque le commutateur est allumé.

  • detachBank() ;

Cette fonction désactive la fonctionnalité de la Banque qui a été mises en place avec la fonction de Banque. Le contrôleur et le canal seront ceux qui ont été définis lors de la création de membres encore une fois, quel que soit l’état de l’interrupteur.
La tige de l’interrupteur définie dans la fonction de Banque sera définie comme une entrée sans résistance de pull-up à nouveau.

Constantes

  • Aucun.

Exemples

  • Analog_example
  • Analog_bank_example

Digital

La classe numérique est conçue pour une utilisation avec des commutateurs et des boutons. Il envoie un message noteOn quand le bouton est enfoncé et un message noteOff lorsque le bouton est relâché. Connectez vos commutateurs entre l’axe d’entrée et le sol, les résistances de pull-up interne seront utilisés. Un numéro de NIP invalide entraînera la LED clignote 13 broches à 1Hz.

Créer des membres

  • Numérique (broche octet, remarque octet, canal de byte, vélocité octets) ;

la broche est la broche numérique avec le bouton connecté.

note est la note MIDI pour envoyer. 60 est moyen C, et chaque note blanche est plus ou moins un. Vous pouvez comparer cela au nombre de contrôleur en mode analogique.

canal est le canal du MIDI.

la vélocité est comment dur la note est touché. Ce n’est pas grave pour un bouton normal, tant que ce n’est pas 0. (Il importe toutefois pour tactile touches par exemple.)

Fonctions

  • Refresh() ;

Cette fonction vérifie l’entrée, et si elle a changé depuis le dernier appel de rafraîchissement, il envoie le message approprié : noteOn quand le bouton est enfoncé, noteOff lorsque le bouton est relâché.

  • Banque (broche octet, remarque octet, canal octets) ;

Cette fonction vous permet d’utiliser un bouton (avec un commutateur) pour plusieurs contrôles. Si l’interrupteur est en OFF du poste, la note et canal seront ceux qui ont été définis lors de la création du membre, si le commutateur est en position ON, le remarque et le canal seront ceux qui ont été introduites en tant qu’arguments de cette fonction.

la broche est la broche numérique avec le commutateur connecté. La résistance de pull-up interne sera activée.

note est la note à utiliser lorsque le commutateur est allumé.

canal est le canal à utiliser lorsque le commutateur est allumé.

  • detachBank() ;

Cette fonction désactive la fonctionnalité de la Banque qui a été mises en place avec la fonction de Banque. La note et le canal seront ceux qui ont été définis lors de la création de membres encore une fois, quel que soit l’état de l’interrupteur. La tige de l’interrupteur définie dans la fonction de Banque sera définie comme une entrée sans résistance de pull-up à nouveau.

Constantes

  • Aucun.

Exemples

  • Digital_example
  • Digital_bank_example

DigitalLatch

La classe DigitalLatch est conçue pour utiliser avec des interrupteurs à bascule, qui ne sont pas momentanés. Il envoie à la fois un noteOn et un message noteOff, chaque fois que l’état change. Le délai entre la marche et d’arrêt de message peuvent être définies. Si l’état change avant que le retard a terminé, le message noteOff est envoyé de toute façon, et un autre « pouls » est lancé : un autre message noteOn est envoyé, et après le délai fixé, le message noteOff est envoyé aussi bien.
Cette classe est utile si vous souhaitez utiliser les boutons « mute » ou « solo » dans votre logiciel avec non-momentanée toggle bascule. Si vous allumez l’interrupteur, la piste appropriée est muet, lorsque vous faites basculer l’interrupteur éteint encore une fois, la piste sera non coupé, par exemple.
Connectez vos commutateurs entre l’axe d’entrée et le sol, les résistances de pull-up interne seront utilisés. Un numéro de NIP invalide entraînera la LED clignote 13 broches à 1Hz.

Créer des membres

  • DigitalLatch (broche octet, remarque octet, canal de byte, octet vitesse, int retard) ;

la broche est la broche numérique avec le commutateur connecté. La résistance de pull-up interne sera activée.

note est la note MIDI pour envoyer. 60 est moyen C, et chaque note blanche est plus ou moins un. Vous pouvez comparer cela au nombre de contrôleur en mode analogique.

canal est le canal du MIDI.

la vélocité est comment dur la note est touché. Ce n’est pas grave pour un interrupteur normal, tant que ce n’est pas 0.

délai est le délai entre les messages noteOn et noteOff, en millisecondes. grands travaux de 100ms. N’entrez pas de 0.

Fonctions

  • Refresh() ;

Cette fonction vérifie l’entrée, et il envoie le message approprié, tel qu’expliqué dans la description de cette classe. (Remarque : le message de noteOff n’est pas envoyé, si cette fonction n’est pas appelée à nouveau, après envoi du message noteOn. Si vous venez de mettre ceci dans votre boucle, cependant, vous devriez être très bien.)

  • Banque (broche octet, remarque octet, canal octets) ;

Cette fonction vous permet d’utiliser un seul interrupteur (avec un commutateur de banque) pour plusieurs contrôles. Si le commutateur de banque soit en OFF, la note et canaux seront ceux qui ont été définis lors de la création du membre, si le commutateur de la Banque est en position ON, le remarque et le canal seront ceux qui ont été introduites en tant qu’arguments de cette fonction.

la broche est la broche numérique avec le commutateur connecté. La résistance de pull-up interne sera activée.

note est la note à utiliser lorsque le commutateur est allumé.

canal est le canal à utiliser lorsque le commutateur est allumé.

  • detachBank() ;

Cette fonction désactive la fonctionnalité de la Banque qui a été mises en place avec la Banque de fonction. La note et le canal seront ceux qui ont été définis lors de la création de membres encore une fois, quel que soit l’état de l’interrupteur. La tige de l’interrupteur définie dans la fonction de Banque sera définie comme une entrée sans résistance de pull-up à nouveau.

Constantes

  • Aucun.

Exemples

  • DigitalLatch_example
  • DigitalLatch_bank_example


RotaryEncoder

Cette bibliothèque est conçue pour utiliser avec un encodeur en quadrature. Il est adapté de la bibliothèque de codeurs d’achetant. Il envoie les messages relatifs. La façon dont les valeurs négatives sont traitées peut être définie. Brancher la fiche commune du codeur au sol, les résistances de pull-up interne seront utilisés. Un numéro de NIP invalide entraînera la LED clignote 13 broches à 1Hz.

Créer des membres

  • RotaryEncoder (broche 1 octet, octet code pin2, contrôleur octet, canal de byte, int speedMultiply, pulsesPerStep octets, mode octets) ;

PIN1 est la première broche d’interruption avec l’encodeur connecté.

PIN2 est la deuxième broche d’interruption avec l’encodeur connecté.

contrôleur est le numéro du contrôleur MIDI (données 1 dans le message de MIDI). C’est comment il s’affichera dans votre logiciel de MIDI, comme une adresse unique.

canal est le canal du MIDI.

speedMultiply est la valeur qui sera multipliée par le déplacement relatif, si le codeur n’est pas assez rapide dans votre logiciel. Si, par exemple, speedMultiply a la valeur 5, et l’encodeur devaient envoyer un message "+ 1", un message "+ 5" va maintenant être transmise. Valeur par défaut est 1.

pulsesPerStep est le nombre d’impulsions l’encodeur sorties quand vous tournez une seule étape ou cliquez sur. Un encodeur rotatif normal, c’est 4. Lorsque vous le réglez à 4, il va changer 1 unité dans votre logiciel par clic que vous tournez, au lieu de 4. Il s’agit pour la plupart plus logique. Pour jog-wheels cependant, vous pouvez définir à 1, pour profiter de la pleine résolution de la roue. Utilisez « NORMAL_ENCODER » ou « JOG » comme argument.

le mode est la manière dont le message MIDI est envoyé (afin de le rendre un nombre signé). 3 modes sont disponibles. Utilisez « ADD_64 », « SIGN_BIT » ou « POS1_NEG127 » comme argument.

Fonctions

  • Refresh() ;

Cette fonction vérifie la position de l’encodeur, et si elle a changé depuis la dernière fois, le changement relatif est envoyé via MIDI.

Constantes

  • NORMAL_ENCODER

4, la valeur pulsesPerStep pour les encodeurs rotatifs normales.

  • FAIRE DU JOGGING

pulsesPerStep la valeur 1 pour jog-wheels.

  • ADD_64

Premier mode pour les messages MIDI relatives. C’est probablement la plus simple. Elle correspond essentiellement 0 à 64 (ce qui est de 128/2). Par exemple, si je veux envoyer -1, j’ai ajouter 64, = 63 et je l’envoie. Si je veux envoyer + 1, j’ai également ajouter que 64 = 65. Si j’envoie juste 64, l’ordinateur ne fera rien, car il sait que c’est un déplacement de 0. (Du côté de l’ordinateur, ils juste soustraire 64, et vous pouvez utiliser le résultat comme rien n’est jamais arrivé).

  • SIGN_BIT

Deuxième mode relative messages MIDI. Sur les ordinateurs, les valeurs signées sont surtout enregistrés avec un bit de signe. Le bit de signe est le bit le plus significatif. Quand il est 0, le nombre défini par les autres bits est positif, quand il est 1, le nombre est négatif. Dans un message MIDI, c’est de type bit 6 (le bit 7, puisqu’il est fondé de 0). Par exemple: + 4 serait 0b00000100, et -4 serait 0b01000100.

  • POS1_NEG127

Troisième mode relative messages MIDI. + 1 comme 1 et -1 qualifier 127. Nous pouvons continuer ce: + 2 = 2 et -2 = 126, etc. jusqu’en + 63 = 63 -63 = 65.

Exemples

  • Encoder_example

sendMidi.h

Il ne s’agit pas d’une classe, c’est juste deux fonctions. Il trouve automatiquement sur quel Arduino vous utilisez et choisit les bons réglages pour envoyer un MIDI. (NOTE : il est déjà automatiquement inclus si vous incluez la bibliothèque MIDI_controller, étant donné que les classes comptent sur elle pour la communication MIDI.)

Fonctions

  • setupMidi (ledPin octets, retard) ;

Configure la connexion MIDI. Exécuter une fois dans le programme d’installation.

ledPin est le code pin avec la LED connecté. Habituellement, c’est 13. La LED clignote chaque fois qu’un message est envoyé. Si vous ne voulez pas cela, ou si vous souhaitez utiliser tous vos NIP comme entrées, utilisez « NO_BLINK ».

délai est le délai (en millisecondes) d’ajouter après chaque message envoyé. 5 ou 10 ms fonctionne très bien. Augmentation de stabilité, diminution pour une réponse plus rapide. Utilisation de « NO_DELAY » à poursuivre dès que le message est envoyé, sans délai. (NOTE : il est normal que le « blink led » à deviennent très faibles si vous utilisez peu ou pas de retard, c’est juste parce que le temps est très court.)

  • sendMidi (octet messageType, canal de byte, octet data1, data2 octets) ;

Envoie un message MIDI.

messageType est le type de message, comme noteOn, noteOff ou CC. Il s’agit d’un nombre de 4 bits.

canal est le canal du MIDI. Il s’agit d’un nombre de 4 bits aussi bien.

Data1 est le premier octet de données. Il s’agit d’un numéro de 7 bits.

data2 est le deuxième octet de données. C’est aussi un nombre de 7 bits.

NOTE : Lisez l’étape 6 pour plus d’informations sur les messages MIDI.

  • sendMidi (octet messageType, canal de byte, données int) ;

Envoie un message MIDI

messageType est le type de message, comme le changement de programme ou de Pitch Bend.

canal est le canal du MIDI. Il s’agit d’un nombre de 4 bits aussi bien.

données est la valeur à envoyer. 7 bits dans le cas d’un changement de programme, de choisir un instrument pour une chaîne ou un nombre compris entre-8192 et 8191 dans le cas d’un Pitch Bend.

Constantes

  • NO_BLINK

La LED clignote clignote pas lorsqu’un message est envoyé. La broche LED sera également pas définie comme sortie.

  • NO_DELAY

Aucun retard n’est ajouté après que le message est envoyé.

  • NOTE_ON

Type de message : 0x90, permet de tourner sur une note. Utilisez NOTE_OFF ou d’envoyer de nouveau à vitesse = 0 pour désactiver à nouveau.

  • NOTE_OFF

Type de message: 0 x 80, permet de désactiver une note.

  • CC

Type de message : 0xB0 (Control Change), permet d’envoyer des valeurs analogiques, comme les valeurs d’un potentiomètre.

  • PROGRAM_CHANGE

Type de message : 0xC0 (Program Change), permet de paramétrer l’instrument d’un certain canal. (Canal 10 est percussions).

  • PITCH_BEND

Type de message : 0xE0 (Pitch Bend), permet d’envoyer de grandes valeurs analogiques.

Débogage

Dans le dossier MIDI_controller de la bibliothèque, il existe un fichier « debug.h ». Si vous avez des problèmes avec vos messages MIDI, décommenter la ligne « #define DEBUG ». Ceci enverra tous les messages MIDI au fil de la série, à 9600 bauds, en notation hexadécimal. Vous pouvez également utiliser des outils tels que « midisnoop » pour résoudre les messages MIDI.

Remarque : n’oubliez pas de commenter la ligne de sortie à nouveau d’utiliser USB MIDI à nouveau.

Exemples

  • sendMidi_example_intoxicated

Articles Liés

Interface Arduino USB MIDI

Interface Arduino USB MIDI

Il y a quelques semaines j'ai commencé à travailler sur un contrôleur MIDI en utilisant Arduino et ATmega32. Je n'ai pas rempli prévu encore. Il est en cours d'élaboration.Vous pouvez lire l'ensemble histoire ici http://openhardware.ro/arduino-usb-mi
Arcade bouton MIDI Controller

Arcade bouton MIDI Controller

ayant une interface matérielle de votre musique préférée / DJ / logiciels VJ peut vraiment ouvrir portes dans votre créativité. La forme la plus répandue de contrôle matériel sur votre PC pour de telles applications est un MIDI controller.Un contrôle
Il dessiner vous-même - MIDI controller avec encre conductrice

Il dessiner vous-même - MIDI controller avec encre conductrice

'Draw It Yourself' est un contrôleur MIDI qui utilise une encre conductrice comme boutons. Il est basé sur l'Arduino et utilise un capteur capacitif (deux, en fait) pour déterminer si les boutons dessinés sont être touchés ou non.http://sanidanz.tumb
Arduino MIDI Controller

Arduino MIDI Controller

Un contrôleur MIDI est toute pièce d'équipement qui génère et transmet les données MIDI aux périphériques compatibles MIDI. En bref, si vous avez des boutons de votre contrôleur MIDI, vous pouvez programmer ces boutons à n'importe quel son que vous s
Construire une base Midi Controller partie 1 - 3 facile Pot (potentiomètre) Arduino Uno effets Midi Controller (série-USB)... Rapide, facile et bon marché !

Construire une base Midi Controller partie 1 - 3 facile Pot (potentiomètre) Arduino Uno effets Midi Controller (série-USB)... Rapide, facile et bon marché !

Bonjour à tous,Je suis relativement nouveau sur Arduino et donc ont dû faire face à ma façon de faire mes propres contrôleurs midi. Il y a une quantité énorme d'informations pointillées autour, mais je ne pouvais pas trouver un tutoriel simple pour u
SugarCube MIDI Controller

SugarCube MIDI Controller

Ce projet est un contrôleur MIDI portable, Arduino-powered, basé sur une grille qui démarre dans une variété d'applications à faire beaucoup de choses avec le son. Il a 16 boutons rétro-éclairés, utilisés comme les entrées et les sorties de donner au
Faire votre propre Arduino personnalisé compatible

Faire votre propre Arduino personnalisé compatible

j'aime Ardunio. J'aime les choses que les gens font avec eux et j'aime faire mes propres. En août dernier que j'ai publié une Instructable comment faire votre propre timbre-poste de taille compatible Arduino. Cet Instructable va vous montrer comment
Synthé bricolage + MIDI controller

Synthé bricolage + MIDI controller

Vous voulez être en mesure de contrôler votre Synthétiseur bricolage avec le MIDI ?Jouer avec un clavier ou de séquence il dans votre logiciel d'édition Audio préféré ?Étape 1: Ce que vous devezMatériel1 x Kit de bricolage synthé1 x Arduino Uno1 câbl
Shield Arduino personnalisé et capteurs

Shield Arduino personnalisé et capteurs

Vue d'ensemble :Cette instructable construira une série de modules de capteur personnalisé et un bouclier d'Arduino. Ces modules sont disponibles de nombreuses sources différentes, mais les fans du site Instructables trouverait probablement satisfact
Contrôle de Cubase avec Arduino basé à MIDI

Contrôle de Cubase avec Arduino basé à MIDI

Un de mes amis voulait contrôler Cubase, son logiciel d'enregistrement audio, avec un bouton poussoir afin qu'il puisse arrêter et démarrer des enregistrements à distance sans avoir à passer à l'ordinateur et tapez sur le clavier. Vous pouvez être ca
Arduino Wii Nunchuck controller

Arduino Wii Nunchuck controller

Comment faire pour commander 2 servos pensé le nunchuck wii.Étape 1: pièces Wii nunchuckArduino2 servoCarte de prototypageFils de raccordementÉtape 2: se connecter Brancher le nunchuck wii comme ce schéma.Étape 3: Télécharger le CodeÉtape 4: fait!!!
3 axe Arduino Based CNC Controller

3 axe Arduino Based CNC Controller

j'ai joué avec différentes conceptions CNC et des contrôleurs de moteurs pas à pas depuis de nombreuses années. J'ai commencé à construire des machines CNC il y a longtemps. Mon premier jet d'inspiration provenait d'eggbot de Bruce Shapiro. J'ai essa
Arduino personnalisé Micro Quadcopter Concept

Arduino personnalisé Micro Quadcopter Concept

modifier le 14 avril : Désolé les gars pour l'entrée tardive. vie a été très agitée ces derniers temps pour moi puisque nous avons dû remplacer un tuyau d'égout enterré dans notre maison est située sur la dalle de béton. Mais nous avons fait des prog
Arduino Bureau Fan Controller

Arduino Bureau Fan Controller

Quand j'ai changé récemment les rôles au sein de la société, je me suis déplacé à sites, passant de Bradford à notre siège social à Wakefield. Je l'ai dit au revoir à mon bureau vieux fidèle avec doit avoir ventilateur de bureau pour me garder cool a