Étape 5: Code
C’est là que la magie opère. Le code n’est pas complexe mais longue avec passablement de répétition. Grande partie du code a rough commentaires décrivant la fonction d’une section de code.Un peu des contrôles IO dans le code ne sont pas écrits dans la norme Arduino code plutôt AVR C. La raison est - vitesse.
Ce qui semble être une seule ligne dans le code de l’Arduino, par exemple digitalRead(), c’est en fait un appel de bibliothèque fait par le compilateur, qui prendrait le processeur vers le haut à 5 microsecondes pour faire une commande de lecture broche simplement numérique. Et c’est beaucoup trop lent pour un fonctionnement fiable lorsque la synchronisation est indispensable.
En revanche le faible niveau code AVR C se traduit par quelques lignes d’assembleur. La même action aurait horloge moins de temps d’instruction 80ns. Moins de temps d’attente pour les données d’entrée donne le plus de temps processeur, l’onde sonore de processus, des performances beaucoup plus fiables.
Le code parcourt chaque microseconde 45, ce qui nous donne 22.2kSPS. Une variable de type entier est affectée à chaque note de musique, qui incrémente chaque cycle jusqu'à ce que cette note n’est n’est plus enregistrée par les portes de l’IR. Le niveau de tension correspondant est extraites de la table d’onde issue de sa variable. Après que lui avoir attribué par les calculs, que les données sont passées à travers le bus SPI à la DAC à convertir.
J’ai fait quelques modifications au code récemment pour consacrer les octaves dans lequel le système couvre. Maintenant, le capteur de droite IR la plupart PD14 est conçu pour les indicateurs le déplacement haut de la feuille entière d’une octave. Pour exemple, si vous voulez obtenir note C6 vous marquera la feuille « C5 » et « Up ».