Paso 2: Detección de punto de media
Los cambios importantes en el código se reproducen a continuación. Puesto que estoy midiendo la señal entrante de A0 con la precisión de 8 bits (0-255), el punto medio (2.5V) dará un valor de 127. Todo el código siguiente se lleva a cabo en la interrupción del ADC (interrupciones cada vez está un análogo nuevo en el valor de A0)
prevData = newData; valor anterior //store
newData = ADCH; //get valor de A0
Si (prevData < 127 & & newData > = 127) {//if aumento y punto medio de cruce
PORTB | = B00010000; //set pin 12 alto
}
else if (prevData > 127 & & newData < = 127) {//if disminuyendo y punto medio de cruce
PORTB & = B11101111; //set pin 12 bajo
}
La Fig 1 muestra el pulso de salida en azul y la señal entrante a A0 en color amarillo. Aviso cómo cada vez que la señal cruza 2.5V, el pulso de salida alterna. En concreto, la salida va alta cuando la señal cruza 2, 5V con una pendiente positiva y la señal baja cuando la señal cruza 2, 5V con una pendiente negativa. Fig 2 muestra el resultado del pulso en azul y la señal de audio antes de que ha sido + 2.5V DC offset en amarillo. Recuerde, este desplazamiento de DC era necesario para obtener la señal de audio en el rango de 0-5V para clavija de entrada analógica del Arduino, pero señal de audio normalmente oscilan alrededor de 0V. En la figura 2 vemos cómo el pulso salidas palanca corresponde al tiempo cuando la señal de audio atraviesa 0V. La figura 3 muestra una forma de onda arbitraria en el pulso de salida en color azul y amarillo (antes DC offset). Una vez más, el pulso cambia cada vez que la señal amarillo cruza 0V, aviso cómo el comportamiento del pulso de salida con la forma de onda arbitraria es más complejo que con la onda senoidal.