Stap 5: Code
Hier is waar de magie gebeurt. De code is niet complex maar lange met behoorlijke hoeveelheid herhaling. Groot deel van de code heeft ruwe opmerkingen met een beschrijving van de functie van een sectie met code.Vrij een beetje van de IO-besturingselementen in de code zijn niet geschreven in standaard Arduino code liever AVR C. De reden is - snelheid.
Wat lijkt op een enkele regel in Arduino code, bijvoorbeeld digitalRead(), is het eigenlijk een bibliotheek oproep door de compiler, die voordat de processor 5 microseconden duren zou te doen een gewoon digitale pin Lees opdracht. En dat is veel te langzaam voor betrouwbare werking waar timing is essentieel.
Aan de andere kant is de geringe AVR C-code vertaald in slechts een paar regels van assembler. Dezelfde actie zou klok in op minder dan 80ns instructie. Minder tijd te wachten voor de invoergegevens geeft de processor meer tijd de geluidsgolf proces, veel meer betrouwbare prestaties.
De code wordt uitgevoerd door elke 45 microseconde, geven ons 22.2kSPS. Een integer-variabele wordt toegewezen aan elke noot muziek die elke cyclus totdat deze nota niet langer door de IR-poorten ingeschreven is verhogen. De overeenkomstige spanningsniveau wordt getrokken uit de tabel van de Golf op basis van de variabele. Nadat het is door de berekeningen die de gegevens worden doorgegeven via de SPI-bus aan de DAC moet worden geconverteerd.
Ik heb enkele wijzigingen aan de code onlangs om het besteden van de octaaf bereik waarin het systeem omvat gedaan. Nu de meeste rechterkant IR sensor PD14 is ontworpen om te vlaggen de up verschuiving van het hele blad door een octaaf. Voor het voorbeeld als u wilt krijgen Opmerking C6 zal u het blad op "C5" en "Up" markeren.