Tendrás que hacer algunas suposiciones. Una suposición típica es que la velocidad de arrastre del usuario no cambia bruscamente en medio de un código de barras.
Dado que los códigos de barras contienen regiones de ancho fijo conocido, es fácil calcular la velocidad de arrastre en función de eso. Su algoritmo solo espera las primeras transiciones fuertes "brillante-oscuro-brillante", y basa su tiempo en eso.
Por ejemplo, considere los omnipresentes códigos de barras EAN-13 (en realidad, lea el excelente artículo de wikipedia del cual esta imagen era tomado):
Comienzanyterminancondosfranjasdeanchoconstante.Porlotanto,primeroobserve"brillante-oscuro-brillante", mida la duración de este "oscuro", luego espere que "brillante" y el siguiente "oscuro" sean tan largos como la primera oscuridad, y si encuentra eso , es decir. un equidistante "oscuro-brillante-oscuro", has
- encontró el comienzo de un código de barras EAN, y
- descubrió la "sincronización" de una banda delgada al mismo tiempo.
En función de la longitud de esa "oscuridad", puede ajustar la interpretación de la señal. Incluso los microcontroladores lentos podrán hacer eso; estos códigos de barras fueron diseñados para la electrónica de la década de 1970, después de todo, y se hicieron populares cuando fueron triviales para decodificar usando la electrónica de la década de 1980 ...
Una nota sobre el uso de un ADC: sí, si tiene un microcontrolador que tiene un ADC, no dude en usarlo. No tiene que hacerlo. Clásicamente, los lectores de códigos de barras se implementan utilizando filtros de paso alto analógicos que solo detectan los bordes entre brillante y oscuro (y luego emiten un 1 cada vez que existe dicho borde). d tiene que ajustar sus algoritmos, pero al reducir su entrada analógica a una entrada binaria, potencialmente ahorra mucha CPU.