Anpassade Arduino MIDI Controller (13 / 14 steg)

Steg 13: Biblioteket



I introt av detta Instructable lovade jag er ett enkelt sätt att programmera din egen MIDI-controller. Tja, är här det!

Det är ett bibliotek som försöker kompromissa mellan stora customizability och användarvänlig kod, tillgänglig för Arduino nybörjare.

Det för närvarande stöder potentiometrar, reglar, växlar, knappar, roterande pulsgivare, och har en enkel funktion för att skicka MIDI-kommandon.
Jag planerar att lägga till mer LED utgång och Pitch Bend kontroll stöd i en nära framtid.

Du installerar det MIDI_controller biblioteket

Detta bibliotek är beroende av MIDI-funktionerna i programvaran vi installerat tidigare (Teensyduino, TeeOnArdu, HIDUINO etc.) så gå tillbaka till steg 6 & 8 och installera dem. Bli inte avskräckt av till synes långa installationsproceduren, om du följer instruktionerna, du ska vara bra. När allt har ställts in, är det verkligen lätt att använda!

Själva MIDI_controller biblioteket installeras som alla andra Arduino bibliotek.

Dessa är instruktionerna för Arduino IDE 1.0.6:

  1. Ladda ner biblioteket här.
  2. Klicka på "...bibliotekmedImport" i menyn "skiss" och sedan "Lägg till bibliotek...".
  3. Bläddra till katalogen nedladdningar, dubbelklicka på den och i den högra kolumnen, Välj MIDI_controller.zip.
  4. Klicka på "Ok".
  5. Starta om IDE för att läsa in sökord (så du får den orange färgen för funktioner etc.)

Det var allt.

Hur man använder det.

Först lägga till biblioteket i din skiss genom att skriva den här raden överst i filen:

#include < MIDI_controller.h >

Biblioteket har för närvarande 4 klasser: Analog, Digital, DigitalLatch och kodare.

En klass har en uppsättning funktioner, och en uppsättning av variabler. Vissa är privata, och används inom klassen, andra är offentliga och kan anropas från utanför klassen. Mer om klasser här.

Det första steget i att använda en klass är att skapa en medlem i klassen. Detta görs oftast innan installationen, så du kan använda medlemmen överallt i programmet.

Kan till exempel lägga till en medlem "potentiometer" i klassen Analog:
Analog potentiometer (bla, bla, bla...);
(Bara ignorera bla för nu)

Nu när medlemmen skapas, kan vi använda Analog funktioner på den, till exempel uppdateringsfunktionen:
potentiometer.refresh();
Precis som Arduino funktioner som digitalWrite, kan inte du använda dessa funktioner utanför setup eller slingan.

För förklaring av vad funktioner gör och vad de är gjorda för, Läs efter referens.

Analog

Den analoga klassen är avsedd för analoga ingångar, som potentiometrar och reglar (eller analoga sensorer som produktionen ett värde mellan 0 och 5V). En ogiltig pin-kod resulterar i LED på stift 13 blinkar med 1Hz.

Skapa medlem

  • Analog (byte stift byte styrenhet, byte kanal, byte upplösning);

PIN är analog stiftet att läsa från. Den är ansluten till wiper potentiometerns.

styrenheten är antalet MIDI controller (data 1 i MIDI-meddelandet). Detta är hur det kommer att visas i din MIDI-programvara, som en unik adress.

kanalen är MIDI-kanal.

resolutionen är en lösning av den analoga läsning. En upplösning på 2 skulle ge endast 2 möjliga värden (0 och 127), en upplösning på 3 skulle ge 3 möjliga värden (0, 63 och 127). En upplösning på 128 ger 128 möjliga värden (0-127), detta är standard, eftersom det är alla 7-bitars nummer. (MIDI använder 7-bitars nummer för att skicka värden) Använd ett värde lägre än 128, som 64, om det finns en massa oväsen på din ingång, om registeransvarige håller på till exempel skicka 0,1,0,1,0,1,0,1,... Använd 128 om du vill använda den högsta tillgängliga upplösningen.

Funktioner

  • Refresh();

Denna funktion kontrollerar indata, och om det har ändrats sedan senaste gången uppdatera kallades, skickar det nya värdet över MIDI (på fördefinierade styrenhetsnummer och kanal).

  • Bank (byte pin, byte styrenhet, byte kanal);

Denna funktion kan du använda en analog ingång (tillsammans med en switch) för flera kontroller. Om växeln i OFF position, registeransvarige och kanalen kommer att vara de som definieras under medlemsskapande, om omkopplaren är i läge ON, kommer att den registeransvarige och kanalen vara de som angavs som argument för funktionen.

stift är den digitala pin med växeln ansluten. Den inre pull-up resistorn aktiveras.

styrenheten är den registeransvarige ska användas när den är påslagen.

kanalen är kanalen när den är påslagen.

  • detachBank();

Denna funktion inaktiveras funktionen bank som skapades med funktionen bank. Den registeransvarige och kanalen kommer att vara de som definieras under medlemsskapande igen, oavsett tillståndet i växeln.
Pin av växeln anges i funktionen bank sätts igen som indata utan pull-up resistor.

Konstanter

  • Ingen.

Exempel på

  • Analog_example
  • Analog_bank_example

Digitala

Den Digital klassen är avsedd för användning med brytare och knappar. Skickar ett noteOn meddelande när knappen trycks, och ett noteOff meddelande när knappen släpps. Anslut dina växlar mellan ingångsstiftet och marken, inre pull-up motstånd kommer att användas. En ogiltig pin-kod resulterar i LED på stift 13 blinkar med 1Hz.

Skapa medlem

  • Digital (byte stift byte Obs, byte kanal, byte velocity);

stift är den digitala pin med knappen ansluten.

Obs är MIDI noterar att skicka. 60 är mitten C, och varje halv ton är plus / minus en. Du kan jämföra detta styrenhetsnummer i Analog.

kanalen är MIDI-kanal.

hastigheten är hur hårt anteckningen är hit. Detta spelar ingen roll för en normal knapp, så länge det inte är 0. (Det spelar roll men för beröring känslig pads t.ex.)

Funktioner

  • Refresh();

Denna funktion kontrollerar indata, och om det har ändrats sedan senaste gången uppdatera kallades det skickar meddelande: noteOn när knappen trycks, noteOff när knappen släpps.

  • Bank (byte pin, byte Obs, byte kanal);

Denna funktion kan du använda en knapp (tillsammans med en switch) för flera kontroller. Om växeln i OFF position, notera och kanalen kommer att vara de som definieras under medlemsskapande, om omkopplaren är i läge ON, kommer att Obs och kanalen vara de som angavs som argument för funktionen.

stift är den digitala pin med växeln ansluten. Den inre pull-up resistorn aktiveras.

Obs är noteringen ska användas när den är påslagen.

kanalen är kanalen när den är påslagen.

  • detachBank();

Denna funktion inaktiveras funktionen bank som skapades med funktionen bank. Obs och kanalen kommer att vara de som definieras under medlemsskapande igen, oavsett tillståndet i växeln. Pin av växeln anges i funktionen bank sätts igen som indata utan pull-up resistor.

Konstanter

  • Ingen.

Exempel på

  • Digital_example
  • Digital_bank_example

DigitalLatch

Klassen DigitalLatch är tänkt att använda med vippströmbrytare, som inte är tillfällig. Den skickar både en noteOn och ett noteOff-meddelande varje gång staten ändras. Fördröjningen mellan på och av meddelandet kan ställas in. Om staten ändras innan förseningen har slutat, noteOff meddelandet skickas ändå, och en annan "puls" startas: en annan noteOn meddelandet skickas, och efter den inställda fördröjningen, noteOff meddelandet skickas också.
Denna klass är användbart om du vill använda knapparna "mute" eller "solo" i din programvara med icke-momentan växla växlar. Om du slår på strömbrytaren, lämpliga banan är avstängd, när du stänger växeln utanför igen, banan kommer att slås, till exempel.
Anslut dina växlar mellan ingångsstiftet och marken, inre pull-up motstånd kommer att användas. En ogiltig pin-kod resulterar i LED på stift 13 blinkar med 1Hz.

Skapa medlem

  • DigitalLatch (byte stift byte Obs, byte kanal, byte velocity, int fördröjning);

stift är den digitala pin med växeln ansluten. Den inre pull-up resistorn aktiveras.

Obs är MIDI noterar att skicka. 60 är mitten C, och varje halv ton är plus / minus en. Du kan jämföra detta styrenhetsnummer i Analog.

kanalen är MIDI-kanal.

hastigheten är hur hårt anteckningen är hit. Detta spelar ingen roll för en normal-omkopplaren, så länge det inte är 0.

fördröjningen är fördröjningen mellan noteOn och noteOff meddelanden, i millisekunder. 100ms fungerar bra. Skriv 0.

Funktioner

  • Refresh();

Denna funktion kontrollerar indata och det skickar meddelande, som förklaras i beskrivningen av denna klass. (Obs: noteOff inte skickas meddelandet, om denna funktion inte är kallas igen, efter noteOn meddelandet. Om du bara skriver detta i din slinga, men ska du vara bra.)

  • Bank (byte pin, byte Obs, byte kanal);

Denna funktion kan du använda en switch (tillsammans med en bank switch) för flera kontroller. Om banken växeln i OFF position, notera och kanalen kommer att vara de som definieras under medlemsskapande, om banken omkopplaren är i läge ON, kommer att Obs och kanalen vara de som angavs som argument för funktionen.

stift är den digitala pin med växeln ansluten. Den inre pull-up resistorn aktiveras.

Obs är noteringen ska användas när den är påslagen.

kanalen är kanalen när den är påslagen.

  • detachBank();

Denna funktion inaktiveras funktionen bank som skapades med funktionen banken. Obs och kanalen kommer att vara de som definieras under medlemsskapande igen, oavsett tillståndet i växeln. Pin av växeln anges i funktionen bank sätts igen som indata utan pull-up resistor.

Konstanter

  • Ingen.

Exempel på

  • DigitalLatch_example
  • DigitalLatch_bank_example


RotaryEncoder

Detta bibliotek är tänkt att använda med en kvadratur kodare. Det är anpassad från PJRC'S encoder bibliotek. Skickar den relativa meddelanden. Hanteringen av negativa värden kan anges. Anslut den gemensamma pin av kodaren till marken, inre pull-up motstånd kommer att användas. En ogiltig pin-kod resulterar i LED på stift 13 blinkar med 1Hz.

Skapa medlem

  • RotaryEncoder (byte pin1 byte pin2, byte styrenhet, byte kanal, int speedMultiply, byte pulsesPerStep, byte läge);

PIN1 är den första avbryta pin med ansluten-kodare.

PIN2 är den andra IRQ pin med kodare ansluten.

styrenheten är antalet MIDI controller (data 1 i MIDI-meddelandet). Detta är hur det kommer att visas i din MIDI-programvara, som en unik adress.

kanalen är MIDI-kanal.

speedMultiply är värdet som ska multipliceras med relativa förskjutningen, om kodaren inte är tillräckligt snabb i din programvara. Om, till exempel speedMultiply är inställt på 5, och kodaren var att skicka ett "+ 1" meddelande, skickas nu ett "+ 5" meddelande. Standardvärdet är 1.

pulsesPerStep är antalet pulser kodaren utgångar när du stänger ett steg eller klicka på. På en normal rotationsencoder är 4. När du ställa till 4, ändras den 1 enhet i din programvara per klick du slår, istället för 4. Detta är mestadels mer logiskt. För jog hjul men kan du sätta den till 1, att dra nytta av i full upplösning av hjulet. Använd "NORMAL_ENCODER" eller "JOGGA" som argument.

läget är hur MIDI-meddelandet skickas (för att göra det signerade flera). Det finns 3 lägen. Använd 'ADD_64', 'SIGN_BIT' eller 'POS1_NEG127' som argument.

Funktioner

  • Refresh();

Denna funktion kontrollerar encoder position, och om det har ändrats sedan förra gången, den relativa ändringen skickas via MIDI.

Konstanter

  • NORMAL_ENCODER

Ange pulsesPerStep till 4, för normala rotationsencoder.

  • JOG

som pulsesPerStep 1, för jog hjul.

  • ADD_64

Första läget för relativa MIDI-meddelanden. Detta är förmodligen den enklaste. Detta mappas i princip 0 – 64 (som är 128/2). Till exempel om jag vill skicka -1, jag lägga till 64, = 63 och jag skicka den. Om jag vill skicka + 1, jag också lägga till 64, = 65. Om jag skickar bara 64, kommer datorn inte, eftersom den vet att det är en förskjutning av 0. (De subtrahera bara 64 på datorn sida, och du kan använda resultatet som om ingenting någonsin hänt.)

  • SIGN_BIT

Andra läget för relativa MIDI-meddelanden. På datorer sparas signerade värden mestadels med lite tecken. Teckenbiten är den mest signifikanta biten. När det är 0, talet definieras av de andra bitarna är positivt, när det är 1, numret är negativt. I MIDI-meddelanden, detta är lite 6 (7 bitar, eftersom det är 0 baserat). Till exempel: + 4 skulle vara 0b00000100 och -4 skulle vara 0b01000100.

  • POS1_NEG127

Tredje läge för relativa MIDI-meddelanden. Definiera + 1 som 1 och -1 som 127. Vi kan fortsätta detta: + 2 = 2 och -2 = 126, osv tills + 63 = 63, och-63 = 65.

Exempel på

  • Encoder_example

sendMidi.h

Detta är inte en klass, det är bara två funktioner. Den hittar automatiskt ut vad Arduino du använder, och väljer rätt inställningar att skicka en MIDI. (Obs: det finns redan automatiskt om du inkluderar MIDI_controller biblioteket, eftersom klasserna lita på det för MIDI-meddelande.)

Funktioner

  • setupMidi (byte ledPin, fördröjning);

Ställer in MIDI-anslutning. Kör en gång i installationsprogrammet.

ledPin är den PIN-kod med LED ansluten. Vanligtvis är detta 13. LAMPAN blinkar varje gång ett meddelande skickas. Om du inte vill detta, eller om du vill använda alla dina stift som insatsvaror, Använd "NO_BLINK".

fördröjningen är fördröjning (i millisekunder) lägga till efter varje meddelande som skickas. 5 eller 10 MS fungerar bra. Öka för stabilitet, minska för snabbare svar. Använd "NO_DELAY" att fortsätta så fort meddelandet skickas utan dröjsmål. (Obs: det är normalt för den 'blinkar led"att bli mycket svagt om du använder kort eller ingen fördröjning, detta är bara för att tiden är mycket kort.)

  • sendMidi (byte messageType, byte kanal, byte data1, byte data2);

Skickar ett MIDI-meddelande.

messageType är typ av meddelande, som noteOn, noteOff eller CC. Detta är en 4-bitars nummer.

kanalen är MIDI-kanal. Detta är ett 4-bitars nummer också.

Data1 är den första databyte. Detta är en 7-bitars nummer.

data2 är den andra databyte. Detta är också en 7-bitars nummer.

Obs: Läs steg 6 för mer information om MIDI-meddelanden.

  • sendMidi (byte messageType, byte kanal, int data);

Skickar ett MIDI-meddelande

messageType är typ av meddelande, som Program Change eller Pitch Bend.

kanalen är MIDI-kanal. Detta är ett 4-bitars nummer också.

data är värdet som ska skickas. 7-bitars vid en förändring av programmet, välja ett instrument för en kanal eller ett nummer mellan-8192 och 8191 vid en Pitch Bend.

Konstanter

  • NO_BLINK

LAMPAN blinkar inte blinkar när ett meddelande skickas. Den LED stiftet kommer också inte anges som utdata.

  • NO_DELAY

Ingen fördröjning kommer att läggas till efter meddelandet skickas.

  • NOTE_ON

Typ: 0x90, använda för att slå på en anteckning. Använd NOTE_OFF eller skicka igen med hastighet = 0 inaktiverar igen.

  • NOTE_OFF

Typ: 0x80, använda att stänga av en anteckning.

  • CC

Typ: 0xB0 (Control Change), använda för att skicka analoga värden, som värden från en potentiometrar.

  • PROGRAM_CHANGE

Typ: 0xC0 (Program Change), använda för att ange instrumentet för en viss kanal. (Kanal 10 är slagverk).

  • PITCH_BEND

Typ: 0xE0 (Pitch Bend), använda för att skicka stora analoga värden.

Debug

I mappen MIDI_controller bibliotek finns det en fil "debug.h". Om du har problem med dina MIDI-meddelanden, kommentera bort raden "#define DEBUG". Detta kommer att skicka alla MIDI-meddelanden över seriell, på 9600 baud, i HEX notationen. Du kan också använda verktyg som "midisnoop" Felsökning av MIDI-meddelanden.

Obs: Glöm inte att kommentera line out igen för att använda USB-MIDI igen.

Exempel på

  • sendMidi_example_intoxicated
Se Steg
Relaterade Ämnen

Arduino MIDI-controller med en ZX avstånd och gest Sensor

Välkommen till detta instructable om hur man bygger en mycket grundläggande MIDI-Controller med SparkFun ZX avståndet och gest Sensor. Detta instructable är del av en skoluppgift.Obs: Detta är ingen kodning handledning. Den final koden kommer att ing...

Arduino MIDI-controller - techshop använder scarff boarduino

jag har tittat på ett antal olika arduino lösningar för MIDI. Mitt projekt omfattar över 100 analoga ingångar att varje känsla hastighet och ge MIDI-utgången. Med den bakgrunden info jag fick från techshop klass beslutat jag att ställa in det först m...

Arduino MIDI Controller

En MIDI-controller är någon utrustning som genererar och sänder MIDI-data till MIDI-aktiverade enheter. Kort sagt, om du har knappar på din MIDI-controller, kan du programmera dessa knappar till alla ljud du vill ha via musikaliska programvara (ex.:...

E-licktronic Arduino MIDI-controller

E-licktronic skapa 3 olika block att bygga din MIDI-hårdvaraMer information http://www.e-licktronic.com/en/...

Bygga en grundläggande MIDI-Controller del 1 - lätt 3 effekter Pot (Potentiometer) Arduino Uno MIDI-Controller (Serial-USB)... Snabb, enkel och billig!

Hej alla,Jag är relativt ny på Arduino och så har kämpat mitt sätt att göra min egen MIDI-controllers. Det finns en enorm mängd information runt om men jag kunde inte hitta en enkel handledning för sådan en enkel enhet; så här går.Min ursprungliga av...

Anpassade MIDI-Controller

Denna handledning visar hur man gör en egen MIDI-controller. (förutsätter erfarenhet med MIDI-controllers, enkla kretsar, enkla c kodning)Steg 1: Räkna ut vad styr du vill på din controllerHur många/vad delar vill du på handkontrollen?Vill du reglage...

Arcade-knappen MIDI-Controller

att ha en hårdvara gränssnitt till din favorit musik / DJ / VJ programvara kan verkligen öppna upp dörrar i din kreativitet. Mest utbredda form av hårdvara kontroll till datorn för sådana program är en MIDI controller.En MIDI-controller kan skicka oc...

Teensy Monster v1.0 / / DIY MIDI-Controller

Välkommen till Instructable Teensy Monster!Detta Instructable hjälper dig montera din Teensy Monster, förstå hur man kan programmera den och ge många tips för att bygga en stor DIY controller.teensymonster.ccKöp din Teensy Monster här.https://github....

Beatfly: Gör en lysande luftskepp och kontrollera den med din röst, tangentbord, MIDI-Controller, Garageband fil, iPhone, Flash och mycket mer! [Mac OSX]

Jag har arbetat med flera projekt med hjälp av luftskepp och ballonger, och här vill jag dela en av dem, Beatfly. Detta är en lysande luftskepp kontrolleras med olika gränssnitt såsom röst, tangentbord, MIDI-Controller, Garageband MIDI-fil, iPhone oc...

Rita själv - MIDI controller med ledande bläck

"Rita det själv" är en MIDI-controller som använder ledande bläck som knappar. Den bygger på Arduino, och använder en kapacitiv sensor (två, faktiskt) att avgöra huruvida ritade knapparna är beröring eller inte.http://sanidanz.tumblr.com/drawity...

Konvertera en räddade leksak till en MIDI-controller

i detta Instructable, jag kommer att gå igenom processen att konvertera ett räddade buller-making barnleksak till ett faktiskt användbara musikaliska instrument med MIDI! Ta en stund att bara kasta en blick över titlarna på stegen i detta Instructabl...

Arduino MIDI fot Pedal tangentbord

UrsprungMin pappa är en musiker. Han kan spela många olika instrument. Men han bara har två armar, men han har också ben! Det är när vi bestämde oss att vi vill återanvända pedaler från en gammal orgel och omvandla dem till en arduino powered MIDI-ke...

Sockerbit MIDI Controller

Detta projekt är en bärbar, Arduino-powered, grid-baserad MIDI-controller som startar upp till olika apps att göra massor av saker med ljud. Den har 16 bakgrundsbelysta knappar, används som både in- och utgångar för att ge registeransvarige lite visu...

MIDI-Controller med tangentbord

Idag bygger vi 400 nyckeln MIDI-controller med hjälp av en Arduino och dator tangentbord!För budget medvetna musik producenterna ute är detta projekt ett bra sätt att bygga en billig kontroll styrelse för din digital audio workstation.Eller om du bar...

Flamma kontrollerade MIDI-Controller

En stor fråga i världen av digital musikproduktion är att hålla det analog värme (som genljöd från rullbandspelare system och rör) i dagens moderna digitala musik. Många svär att analoga system har ett ljud som aldrig kan replikeras av bits, och hopp...

Arkad stil DJ MIDI-controller

>>> detta är inte helt klar ännu som jag spänt lite av banan. Jag ska uppdatera den instructable och ladda upp en video när det sorteras <<<Jag har varit DJ ungefär 10 år nu, och under de senaste har jag bytte bra gamla gammaldags vinyl...

Makey Makey MIDI-controller

Makey makey är en mikrokontroller som fungerar som ett tangentbord när den är ansluten till datorn. Jag omprogrammerade det så att den skickar MIDI-noter. Varför? Eftersom när du använder ett tangentbord till kontroll saker har fönstret du styr vara...

Gör din egen billiga USB-MIDI-Controller eller tangentbord

Jag letade efter en USB MIDI-controller-enheten (eller gränssnitt) för musikprogram som piano eller orgel tangentbord eller pedalboard. Efter en del forskning ville jag gå till en mer "hemlagad" lösning. Mitt val har äntligen varit inriktad på e...

BeatSauce - en Laptop Midi Controller Hybrid

Länge jag har velat bygga en egen MIDI-controller, och medan det är exakt en ny domänkontrollant jag gjorde andas nytt liv i några gamla hårdvara.Använder vissa delar som jag hade samlat och minimal fickpengar på nya jag lyckades bygga a... en... DJ...