Stap 5: De Code
Hier is de code van de Arduino. Opmerkingen over het vindt u hieronder.
Zeven Segment bibliotheek:
Zoals eerder aangegeven heb ik geschreven een zeven segment bibliotheek met snelle schrijven digitale pinnen. Het moet snel, of anders het vertraagt de MIDI verwerking neer merkbaar.
Microtonale MIDI bibliotheek:
Ik schreef ook een microtonale MIDI bibliotheek waarmee de input van MIDI toelichting gebeurtenissen en de output van n-TET microtonale toelichting gebeurtenissen worden verwerkt. Om te houden van de code snel, filtert deze bibliotheek, dat wil zeggen, doet niets met, MIDI commando's of gegevens die niet zijn gerelateerd aan de toelichting gebeurtenissen.
De code maakt gebruik van alle 16 MIDI-kanalen achtereenvolgens en cyclisch verzenden pitchbend en notities. Dit is omdat de pitchbend invloed op een hele kanaal, en elke microtonale noot vereist vaak een verschillende pitchbend-waarde. Het kan worden aangepast voor het gebruik van minder kanalen, maar het aantal kanalen zou het aantal beschikbare notities polyfonie.
Ik heb een monofone modus die de vorige opmerking indien nodig retriggers geïmplementeerd. Bij de behandeling van microtonale schalen met meer dan 12 noten, in sommige gevallen wordt dezelfde MIDI noot gebruikt voor aangrenzende microtonale notities met verschillende pitchbend waarden. Als beide notities worden gehouden op en vervolgens een vrijgegeven, wanneer een notitie uit opdracht verzonden voor een van de een monofone synthesizer microtonale toelichting dan beide notities zijn uitgeschakeld. Wanneer monofone modus actief is retriggers de code de resterende microtonale opmerking en de pitchbend waarde, dat wat je zou verwachten is bij het afspelen van een monosynth. De verlichte knop schakelt u tussen de retrigger op voor een monosynth en uit voor een polyfone synthesizer.
Ik heb ook geïmplementeerd Pythagoras afstemmen in de code--toegewezen aan de "00" stappen per octaaf instellen, maar het is uitgecommentarieerd omdat de vereiste als verklaringen merkbare latency veroorzaakt. Misschien is er meer optimalisatie te doen of misschien een snellere microcontroller zoals op een Teensy zou toestaan dat mijn code goed genoeg te werken. Of, misschien stok met 53-TET voor een goed genoeg onderlinge aanpassing van de reine 5-limiet. :)
Belangrijkste code:
De belangrijkste code bevat interrupt handling voor de roterende encoder en de knop. Ik vond Deze pagina en Deze pagina nuttig voor het schrijven van de code onderbreken.
De ISR behandelt alle roterende encoder en verlichte knop functionaliteit. Een encoder is ingeschakeld, de motie wordt toegewezen aan een verandering in de stappen per octaaf of base MIDI Opmerking Als deze waarden worden bijgewerkt voor het 7 segment display. Wanneer de knop wordt gedrukt, monofone modus is van een knevel gevoorzid in- of uitschakelen en de interne LED is van een knevel gevoorzid in- of uitschakelen om aan te passen.
De hoofdlus bestaat in wezen een oproep om één byte van binnenkomende MIDI-gegevens en dan een enkele flitser voor de juiste LEDs in het 7 segment display.