Etape 1: Détection de Signal pente
La partie importante du code est reproduite ci-après. Tout ce code se déroule dans l’ADC interrupt (interruptions et s’exécute chaque fois qu’un analogue de la nouvel valeur est prêt d’A0, plus d’infos sur quelles interruptions sont et pourquoi nous utilisons eux peuvent être trouvés ici)
prevData = newData ; valeur précédente //store
newData = ADCH ; //get valeur de A0
Si (newData > prevData) {//if pente positive
PORTB | = B00010000 ; //set broche 12 haut
}
ElseIf (newData < prevData) {si pente négative
PORTB & = B11101111 ; //set broche 12 basses
}
Je dois souligner ici que dans ce tutoriel j’utilise direct manipulation port pour allumer/éteindre la sortie broche (12) de l’Arduino. J’ai fait cela parce que la manipulation de port est une manière beaucoup plus rapide de traiter les broches de l’Arduino que la commande digitalWrite(). Étant donné que j’ai dû mettre tout le code ci-dessus, à l’intérieur d’une routine d’interruption qui allait à 38,5 kHz, j’ai besoin du code d’être aussi efficace que possible. Vous pouvez lire plus d’infos sur port de manipulation sur le site de l’Arduino, ou voir les commentaires que j’ai écrit ci-dessus pour comprendre en quoi consiste chaque ligne. Vous noterez également dans le code ci-dessous que j’ai utilisé certaines commandes inconnues dans la fonction setup() pour que je puisse obtenir des entrées analogiques de l’Arduino à échantillon à haute fréquence. Plus d’informations sur qui se trouvent dans mon tutoriel Arduino Audio Input.
Figure 1 montre la sortie d’impulsions en bleu et l’onde sinusoïdale en jaune sur un oscilloscope. Avis comment les impulsions de sortie bascule à chaque fois que l’onde sinusoïdale atteint un maximum ou minimum. Fig. 2 montre les impulsions de sortie en bleu pour une forme d’onde arbitraire en jaune. Notez ici comment la vague d’impulsion prend sur un cycle d’utilisation irrégulière car le signal entrant (jaune) est beaucoup plus compliqué qu’une onde sinusoïdale.