Vamos a ver si es que el analizador no nos está mintiendo. Prueba el siguiente código:
// Conectar los canales a los pines analógicos del 8 al 11
volatile byte pinState;
volatile boolean newState;
void setup() {
DDRK = 0; // Pines analógicos del 8 al 11 como entradas
PORTK = 15; // Pines analógicos del 8 al 11 en estado alto para coincidir con la interfaz
Serial.begin(9600);
PCMSK2 = 15; // Pines analógicos del 8 al 11 son los que van a desencadenar la interrupción
PCICR = 4; //
}
void loop() {
if (newState) {
unsigned long t = millis();
Serial.print(pinState, BIN);
Serial.print(" - ");
Serial.println(t);
newState = false;
}
}
ISR(PCINT2_vect) {
pinState = ~PINK; // Invertir los bits para que aparezca con 1 los canales activos
newState = true;
}
OJO A LO QUE DICE AL PRINCIPIO:
// Conectar los canales a los pines analógicos del 8 al 11
Esto se debe a que no todos los pines funcionan para la interrupción de cambio de estado; pero los indicados sí.
Voy a explicar cómo funciona: conectas los canales a los pines antes indicados, sube el programa y abre el monitor serial que debe estar a 9600 baudios.
Cuando el estado de algún canal cambie, deberá aparecer algo como lo siguiente:
100 - 2364
Permíteme explicar cómo se lee eso:
100: es el estado de los canales representado en el sistema binario. Se lee de derecha a izquierda cuál texto árabe. El bit más a la derecha representa el estado del canal conectado al pin 8 analógico; y el bit más a la izquierda representa al pin 9, 10 u 11 analógicos, dependiendo de cuantos aparezcan.
Los bits/pines que no aparezcan, se sobreentiende que están en cero; por ende, son canales capturados como inactivos en el momento.
Si solo aparece un 0, todos los canales están inactivos; si solo aparece un 1, solo el conectado al pin 8 analógico está activo.
2364: momento (en milisegundos) en que ocurrió la interrupción. Por sí solo podría ser últil para validar el ancho del pulso.
Si al momento de las interrupciones se captura que más de un canal a la vez se activa, pues se evidenciaría que el modo de operar de la interfaz no es el esperado...