Seguramente le falta trabajo pero esta versión ya te cuenta entre 99 y 101 mseg como valores apropiados que puedes ampliar a 98 102 incrementando a 2 la TOLERANCIA
Este es el código logrado
// Conectar los canales a los pines analógicos del 8 al 11
#define TOLERANCIA 1 // cambia este valor para establecer el margen de error en mseg.
volatile byte pinState;
volatile boolean newState;
volatile byte canal;
volatile byte canales[8] = {1, 2, 4, 8, 16, 32, 64, 128};
volatile unsigned long tc[8];
unsigned int contador[8];
String orden[8] = {"$2","$5","$10","$20","$0.25","$0.5","$1","$2"};
void setup() {
DDRK = 0; // Pines analógicos del 8 al 15 como entradas
PORTK = 0; // Pines analógicos del 8 al 15 en estado alto para coincidir con la interfaz
Serial.begin(9600);
PCMSK2 = 255; // Pines analógicos del 8 al 15 son los que van a desencadenar la interrupción
PCICR = 4; //
}
void loop() {
if (newState) {
if (abs(tc[canal]-100)<= TOLERANCIA)
contador[canal]++;
Serial.print(orden[canal]);
Serial.print(" ");
Serial.print(tc[canal]);
Serial.print("mseg Billetes: ");
Serial.println(contador[canal]);
newState = false;
}
}
ISR(PCINT2_vect) {
byte temp;
temp = PINK;
for (int i=0; i<8; i++) {
if (canales[i] == temp) {
canal = i;
tc[canal] = millis();
break;
}
}
if (temp == 0) {
tc[canal] = millis()-tc[canal];
newState = true;
}
//pinState = ~PINK; // Invertir los bits para que aparezca con 1 los canales activos
}