Stap 6: Code tijd! Nou ja, bijna...
Arduino Uno
Voor de Uno hebt u te knipperen de ATmega16U2 * op het bord met Dimitri Diakopoulos van aangepaste firmware. Dit is een HEX-bestand dat u op de chip met behulp van Atmel's Flip software branden. De firmware is de input van de belangrijkste microprocessor van de Uno (ATmega328P) en zet deze om in de MIDI over USB-protocol.
(*) De belangrijkste microprocessor van de Uno (ATmega328P) heeft geen USB-mogelijkheden. In plaats daarvan is er een seriële verbinding op pin 0 en 1, met een tweede microprocessor (ATmega16U2, dit is de zwarte pleintje tussen de USB-connector en de TX en RX LEDs). Deze chip is geprogrammeerd als een USB-serieel converter en wordt herkend door de computer als een seriële of COM-poort. Door het uploaden van uw eigen firmware naar de chip, kan het vrijwel elk USB-apparaat, met inbegrip van een MIDI-apparaat.
Programmeren van het Uno en MIDI
Omdat de ATmega328P afhankelijk van de seriële verbinding tot stand gebracht door de ATmega16U2 is voor het uploaden van nieuwe Arduino schetsen, wijzigen u uw programma niet tijdens het uitvoeren van de MIDI-firmware. Dat is waarom wij zal schrijven ons programma eerst en branden de MIDI firmware na het uploaden van ons programma op de ATmega328.
U kunt de firmware van de MIDI op elk moment verwijderen en opnieuw installeren van de originele Arduino Uno seriële firmware.
Arduino Leonardo
De Leonardo moet alleen een speciale bibliotheek de Teensy MIDI-functies gebruiken op de Arduino.
Hier is hoe om dit te installeren:
Linux (Ubuntu)
- De officiële Arduino IDE 1.0.6 downloaden hier. U moet 1.0.6, andere versies zullen niet werken.
- Maak een nieuwe map in je home directory 'Executables' genoemd.
- Pak het arduino-1.0.6-linux64.tgz-bestand dat u zojuist hebt gedownload naar de nieuwe map met uitvoerbare bestanden.
- Download de Teensyduino installateur van hier.
- In de 'andere bestanden' sectie op dezelfde pagina, klik op 'Linux udev regels' en druk op CTRL + S om te slaan.
- De extensie .txt in de opslaan verwijderen dialoogvenster, en kies 'alle bestanden' in plaats van .txt voordat u opslaat (maar houd de .rules extensie). Opslaan in de map 'Downloads'.
- Toegankelijk te terminal venster met behulp van CTRL + ALT + T, of via het toepassingsmenu van uw.
- Dit commando de udev regels kopiëren naar de juiste map.
sudo cp Downloads/49-teensy.rules /etc/udev/rules.d/ - Ga naar je map ' Downloads ' met behulp van uw browser van het dossier. Het teensyduino.64bit -bestand dat u hebt gedownload in stap 4 vlak tikken, en kies 'Eigenschappen'.
- Onder het tabblad 'Permissies' het selectievakje 'Allow bestand als programma uitvoeren'. Sluit dit venster.
- Dubbelklik op de teensyduino.64bit voor het uitvoeren van het installatieprogramma.
- Druk op 'volgende'.
- Vervolgens bladert u naar uw ' arduino-1.0.6 "map in uw map 'Executables'. Zodra u dit doet, moet de knop 'next' niet langer worden grijs weergegeven. Klik op 'volgende'.
- Selectievakje de 'MIDI' en andere bibliotheken, indien nodig voor uw project. (U kunt ook selecteren 'all' als u wilt). Klik vervolgens op 'volgende' weer.
- Klik vervolgens op 'Install'.
- Downloaden van de Fricklr 'TeeOnArdu'-software van GitHub. Aan de rechterkant is er een knop "Download ZIP".
- Pak het ZIP-bestand in uw downloadsomslag en de bestanden openen in uw browser van het dossier.
- Moet er een map met de naam 'TeeOnArdu-meester'. Dubbelklik op en kopieer de map 'TeeOnArdu'.
- Ga naar de map /home/Executables/arduino-1.0.6/hardware en langs de TeeOnArdu map hier.
- In de terminal (CTRL + ALT + T), ga naar de directory van de Arduino:
cd Executables/arduino-1.0.6/ - Voer de Arduino software:
. / arduino - Selecteer in de Arduino software, onder 'Tools', 'TeeOnArdu (Leo op TeensyCore)' als je board.
- 'USB-Type' naar 'MIDI' instellen.
- Nu ben je klaar voor het gebruik van MIDI met uw Leonardo!
De instructies voor Windows en Mac zijn zeer vergelijkbaar, kunnen zij worden gevonden op de pagina van Adafruit. Merk op dat de versie anders is. De Adafruit tutorial Arduino 1.0.5 gebruikt, maar u moet 1.0.6. Ook niet de downloadverbindingen Adafruit gebruiken, maar de koppelingen in stap 1, 4 en 16 (hierboven genoemde) gebruiken.
MIDI-berichten
Voordat we beginnen met programmeren, laten we eerst proberen om te begrijpen wat MIDI.
MIDI (Musical Instrument Digital Interface) is ontwikkeld in 1982, en is een standaard voor communicatie tussen muziekinstrumenten, zoals de naam impliceert. De originele signalen werden overgedragen aan een ouderwetse DIN 41524 connector. Tegenwoordig hebben de meeste MIDI-apparaten een USB-aansluiting, om deze te verbinden met een computer. Echter, het protocol zelf is niet veranderd.
Een MIDI-bericht bestaat uit 3 bytes, en heeft 4 delen:
- Byte status: in ons geval, deze zal bestaan uit een 'kanaal bericht' en een 'kanaal'.
- Gegevensbyte 1: een 7-bits getal.
- Gegevensbyte 2: een andere 7-bits getal.
Voor onze MIDI-controller, we zullen worden met behulp van slechts 3 ander kanaal berichten: noteOn, noteOff en ControlChange.
- NoteOn:
kanaal bericht: 0b1001 * (0x9) **
kanaal: 0b0000-0b1111 (0x0-0xF) gegevens 1: Noteer het nummer: 0-127
gegevens 2: snelheid ***: 0-127 - NoteOff:
kanaal bericht: 0b1000 (0x8)
kanaal: 0b0000-0b1111 (0x0-0xF)
gegevens 1: Opmerking nr: 0-127
gegevens 2: snelheid: 0-127 - ControlChange:
kanaal bericht: 0b1011 (0xB)
kanaal: 0b0000-0b1111 (0x0-0xF)
gegevens 1: controllernummer: 0-119 ***
gegevens 2: controller waarde: 0-127
(*) 0b betekent binaire notatie.
(*) 0 x middelen hexadecimale notatie.
(***) De snelheid is hoe hard een sleutel raken.
(****) Controller nummers 120-127 zijn niet beschikbaar voor normale controllers, maar zijn gereserveerd voor de bedrijfsmodi.
Opmerking: er zijn andere berichten als wel (zie links onderaan deze stap). Bijvoorbeeld een pitch bend bericht heeft zijn eigen 4 eerste bits, en is niet een besturingsbericht van de verandering, het heeft geen controllernummer, zodat het een 14-bits waarde kunt opslaan. Dit wordt gebruikt door hogere einde MIDI-controllers, toen de hogere resolutie is vereist. Er kan alleen wel een maximum van 16 toonhoogte benders (1 voor elk van de 16 kanalen).
N oteOn en noteOff worden gebruikt voor de sleutels van een digitale piano, bijvoorbeeld. Hier worden de nummers van de nota met hun bijbehorende muzieknoten. De Midden-C (C4) wordt toegewezen aan 60, en 440Hz (A4) is toegewezen aan 69. We zullen deze opmerkingen gebruiken voor onze knoppen en schakelaars: noteOn wanneer de knop wordt gedrukt, en noteOff wanneer de knop wordt losgelaten. Ik adviseer gebruikend kanaal 1 (0b0000), maar wanneer u meer dan 128 knoppen hebt, moet u uiteraard een tweede kanaal. Gegevens 1 zullen de notitie nummer, het adres als je wil, van de knop, en Data 2 (de snelheid) maakt eigenlijk niet uit voor een knop (hoewel het doet als de gewenste druk/snelheid gevoelige pads bijvoorbeeld). We maken het gewoon 127 (100%).
Algemene notatie noteOn: 1001 cccc 0nnnnnnn 0vvvvvvv
waar cccc is het kanaal, is nnnnnnn het getal van de knop, en vvvvvvv de snelheid
Bijvoorbeeld: dringende knop 15 (0b00001111) zou dit signaal: 1001 0000 00001111 01111111
Algemene notatie noteOff: 1000 cccc 0nnnnnnn 0vvvvvvv
waar cccc is het kanaal, is nnnnnnn het getal van de knop, en vvvvvvv de snelheid
Bijvoorbeeld: loslaten van knop 15 (0b00001111) zou dit signaal: 1000 0000 00001111 01111111
ControlChange berichten worden gebruikt voor domeincontrollers die een breed scala van waarden, zoals een potentiometer, of een fader hebben kunnen. Deze waarde heeft 7 bits, dus het heeft een bereik van 0 tot 127 (0% - 100%). Hier is een lijst van alle domeincontrollers en hun bijbehorende rugnummers.
Algemene notatie ControlChange: 1011 cccc 0nnnnnnn 0vvvvvvv
waar cccc is het kanaal, is nnnnnnn het nummer van de controller, en vvvvvvv de waarde van de controller.
Bijvoorbeeld: draaien het volume (controllernummer 7 of 0b00000111) van kanaal 8 (0b1000) tot het maximum (127 of 0b01111111) stuurt dit bericht: 1011 1000 00000111 01111111
Meer informatie over het MIDI protocol kan gevonden worden op midi.org, in deze PDFof op Wikipedia.