Étape 2: Détection de Point milieu
Les modifications importantes au code sont reproduites ci-après. Étant donné que je suis en mesure le signal entrant de A0 avec une précision de 8 bits (0-255), le point médian (2.5V) donnera une valeur de 127. Tout le code suivant se déroule à l’interruption de l’ADC (interrompt chaque fois un analogue de la nouvel valeur est prêt d’A0)
prevData = newData ; valeur précédente //store
newData = ADCH ; //get valeur de A0
Si (prevData < 127 & & newData > = 127) {//if augmentant et passage point médian
PORTB | = B00010000 ; //set broche 12 haut
}
ElseIf (prevData > 127 & & newData < = 127) {//if diminuant et passage point médian
PORTB & = B11101111 ; //set broche 12 basses
}
Figure 1 montre les impulsions de sortie en bleu et le signal entrant à A0 en jaune. Avis comment chaque fois que le signal traverse 2.5V, l’impulsion de sortie bascule. Plus précisément, la sortie va élevée quand le signal traverse 2, 5V avec une pente positive et le signal est faible quand le signal traverse 2, 5V avec une pente négative. Fig. 2 montre la sortie d’impulsions en bleu et le signal audio avant qu’elle soit + 2, 5V DC offset en jaune. N’oubliez pas, ce décalage CC était nécessaire pour obtenir le signal audio dans la plage 0-5V pour broche d’entrée analogique de l’Arduino, mais normalement audio signal oscillent autour de 0V. Dans la figure 2, vous pouvez voir comment les impulsions de sortie bascule correspond à l’heure quand le signal audio traverse 0V. Fig. 3 montre une forme d’onde arbitraire en jaune (encore une fois avant le décalage CC) et l’impulsion de sortie en bleu. Encore une fois, l’impulsion active ou désactive chaque fois que le signal jaune croise 0V, avis, comment le comportement de l’impulsion de sortie avec la forme d’onde arbitraire est plus complex qu’avec l’onde sinusoïdale.