Anpassade Arduino MIDI Controller (6 / 14 steg)
Steg 6: Kod tid! Tja, nästan...
Arduino Uno
För Uno måste du flash ATmega16U2 * på brädet med Dimitri Diakopoulos anpassade firmware. Detta är en HEX-fil du bränna på chip med Atmel's Flip programvara. Firmware tar input från den huvudsakliga mikroprocessorn för Uno (ATmega328P) och omvandlar den till MIDI över USB-protokollet.
(*) Den huvudsakliga mikroprocessorn för Uno (ATmega328P) har ingen USB-kapacitet. I stället, den har en seriell anslutning på pin 0 och 1, med en andra mikroprocessor (ATmega16U2, detta är en liten svart ruta mellan USB-kontakten och TX och RX lysdioder). Detta chip är programmerad för att vara en USB-seriell konverterare och känns igen av datorn som en följetong eller COM-port. Genom att ladda upp din egen firmware till chip, kan det vara praktiskt taget någon USB-enhet, inklusive en MIDI-enhet.
Programmering av Uno och MIDI
Eftersom ATmega328P förlitar sig på seriell anslutning av ATmega16U2 för att ladda upp nya Arduino skisser, kan inte du ändra ditt program när du kör MIDI firmware. Det är varför vi kommer att skriva vårt program först, och bränna MIDI firmware efter uppladdning vårt program till ATmega328.
Du kan ta bort MIDI firmware när som helst och installera om den ursprungliga Arduino Uno seriell firmware.
Arduino Leonardo
Leonardo behöver bara ett särskilt bibliotek att använda Teensy MIDI-funktionerna på Arduino.
Här är hur du installerar:
Linux (Ubuntu)
- Ladda ner officiella Arduino IDE 1.0.6 här. Du behöver 1.0.6, andra versioner kommer inte arbete.
- Skapa en ny mapp i din hemkatalog som kallas "Körbara".
- Extrahera filen arduino-1.0.6-linux64.tgz du just laddat ned till den nya körbara filer-mappen.
- Data överför det Teensyduino installerat här.
- I avsnittet "andra filer" på samma sida, klicka på "Linux udev regler", och slå CTRL + S för att spara.
- Ta bort filnamnstillägget .txt i spara dialog, och välja "alla filer" i stället för .txt innan du sparar (men hålla tillägget .rules). Spara den i mappen "Downloads".
- Öppna ett terminalfönster med CTRL + ALT + T, eller via din programmenyn.
- Kör kommandot Kopiera reglerna i udev till rätt mapp.
sudo cp nedladdningar/49-teensy.rules /etc/udev/rules.d/ - Gå till du hämtningsmappen använda din fil webbläsare. Högerklicka på filen teensyduino.64bit som du hämtade i steg 4 och välj "Egenskaper".
- Markera rutan "Tillåt filen som program" under fliken "Behörigheter". Stäng sedan fönstret.
- Dubbelklicka på teensyduino.64bit för att köra installationsprogrammet.
- Tryck på "nästa".
- Bläddra till din "arduino-1.0.6" mapp inuti mappen "Executables". När du gör detta, bör 'Nästa'-knappen inte längre vara nedtonad. Klicka på "nästa".
- Markera rutan "MIDI" och andra bibliotek, om nödvändigt för ditt projekt. (Du kan också välja "alla" om du vill). Klicka sedan på "nästa" igen.
- Klicka på "Installera".
- Ladda ner Fricklrs "TeeOnArdu"-programvara från GitHub. På höger sida finns det en knapp 'Hämta ZIP'.
- Extrahera ZIP-filen i mappen Hämtade filer och öppna filerna i webbläsaren filen.
- Det bör finnas en mapp som heter "TeeOnArdu-herre". Dubbelklicka på den och kopiera katalogen "TeeOnArdu".
- Gå till mappen /home/Executables/arduino-1.0.6/hardware och förbi mappen TeeOnArdu här.
- I terminalen (CTRL + ALT + T), gå till katalogen Arduino:
CD Executables/arduino-1.0.6/ - Kör programmet Arduino:
. / arduino - Inuti den Arduino programvaran, under "Verktyg", välj "TeeOnArdu (Leo på TeensyCore)" som din styrelse.
- Ange "USB-typ" till "MIDI".
- Nu är du klar att använda MIDI med din Leonardo!
Instruktionerna för Windows och Mac är mycket lika, finns de på sidan Adafruit. Observera att versionen är olika. Den Adafruit läraren använder Arduino 1.0.5, men du behöver 1.0.6. Också, inte använda den Adafruit data överför golfbanan, men Använd länkarna i steg 1, 4 och 16 (se ovan).
MIDI-meddelanden
Innan vi börjar programmering, låt oss först försöka förstå vad MIDI är.
MIDI (Musical Instrument Digital Interface) togs fram 1982 och är en standard för kommunikation mellan musikinstrument, som namnet antyder. De ursprungliga signalerna överfördes över en gammaldags buller 41524 connector. De flesta MIDI-enheter har numera, en USB-kontakt, Anslut dem till en dator. Men har inte själva protokollet förändrats.
Ett MIDI-meddelande består av 3 byte, och har 4 delar:
- Status Byte: i vårt fall, detta kommer att bestå av en "kanal meddelande" och en "kanal".
- Databyte 1: en 7-bitars nummer.
- Databyte 2: en annan 7-bitars tal.
För vår MIDI-controller, vi kommer att använda endast 3 olika kanaler meddelanden: noteOn, noteOff och ControlChange.
- NoteOn:
kanal meddelande: 0b1001 * (0x9) **
kanal: 0b0000-0b1111 (0x0-0xF) data 1: anteckna: 0-127
data 2: hastighet ***: 0-127 - NoteOff:
kanal meddelande: 0b1000 (0x8)
kanal: 0b0000-0b1111 (0x0-0xF)
data 1: Observera numer: 0-127
data 2: hastighet: 0-127 - ControlChange:
kanal meddelande: 0b1011 (0xB)
kanal: 0b0000-0b1111 (0x0-0xF)
data 1: styrenhetsnummer: 0-119 ***
data 2: controller värde: 0-127
(*) 0b innebär binära notation.
(*) 0 x medel hexadecimal notation.
(***) Hastigheten är hur hårt en nyckel är drabbade.
(****) Controller nummer 120-127 är inte tillgängliga för normala styrenheter, men är reserverade för driftslägen.
Obs: det finns andra meddelanden som wel (se länkar längst ned i detta steg). Till exempel ett pitch bend meddelande har sin egen 4 första bitarna, och är inte ett kontrollmeddelande förändring, den har inget controller-nummer, så det kan lagra ett 14-bitars värde. Detta används av högre slutet MIDI controllers, när högre upplösning krävs. Dock kan det bara finnas högst 16 pitch benders (1 för vart och ett av de 16 kanalerna).
N oteOn och noteOff som används för nycklarna till en digital piano, till exempel. Här är Obs siffrorna med deras motsvarande musiknoter. Den mellersta C (C4) mappas till 60, och 440Hz (A4) mappas till 69. Vi kommer att använda dessa anteckningar för våra knappar och switchar: noteOn när knappen trycks, och noteOff när knappen släpps. Jag rekommenderar att du använder kanal 1 (0b0000), men när du har mer än 128 knappar, måste naturligtvis en andra kanal. Data 1 kommer att notera nummer, adress om ni vill, om knappen och Data 2 (hastighet) spelar egentligen ingen roll för en knapp (även om det gör om du vill ha tryck/velocity känsliga kuddar till exempel). Vi ska bara göra det 127 (100%).
De allmänna notation noteOn: 1001 cccc 0nnnnnnn 0vvvvvvv
där cccc är kanalen, är Hej numret på den knappen och vvvvvvv hastighet
Till exempel: du trycker på knappen 15 (0b00001111) skulle skicka detta meddelande: 1001 0000 00001111 01111111
De allmänna notation noteOff: 1000 cccc 0nnnnnnn 0vvvvvvv
där cccc är kanalen, är Hej numret på den knappen och vvvvvvv hastighet
Till exempel: släppa knappen 15 (0b00001111) skulle skicka detta meddelande: 1000 0000 00001111 01111111
ControlChange meddelanden används för styrenheter som kan ha ett brett utbud av värden, som en potentiometer eller en fader. Detta värde har 7 bitar, så det har intervallet 0 till 127 (0% - 100%). Här är en lista över alla styrenheter och deras motsvarande nummer.
De allmänna notation ControlChange: 1011 cccc 0nnnnnnn 0vvvvvvv
Hej är där cccc är kanalen, antalet controller, och vvvvvvv värdet av registeransvarige.
Till exempel: svarvning volymen (controller nummer 7 eller 0b00000111) av kanal 8 (0b1000) högsta (127 eller 0b01111111) kommer att sända detta budskap: 1011 1000 00000111 01111111
Mer information om MIDI-protokollet kan hittas på midi.org, i denna PDF, eller på Wikipedia.