¿No encanta ésos anillos de Adafruit Neopixel? Tengo los 12, 24 y los enormes anillos de 60 píxeles, y hasta ahora todos mis bocetos han sido configurables para funcionar con cualquiera de ellos, con el tamaño de estáticamente en el tiempo con una línea de compilación como
#define PIXELS 24
Así que si cambio el anillo de un tamaño diferente tengo que recompilar el bosquejo y volver a subirlo. Pero no sería agradable si el bosquejo podría determinar automáticamente el tamaño del anillo, haciéndolo Plug ' jugar! Las fotografías muestran a cada uno de los años 60, 24 y 12 pixel anillos a su vez, impulsado por el mismo bosquejo sin modificar.
Hay varias maneras posibles de hacerlo, todos confiando en el hecho de que una vez que todos los píxeles en un anillo han recibido sus datos RGB, cualquier dato sobra cae fuera de la conexión de la duda al final de la cadena para hacer posible encadenamiento más Neopixels si te gusta. En principio entonces, sólo podrían conectarse duda de un perno de la entrada en el Arduino y contar cuántos píxeles has rellenos antes los datos filtrado fuera el otro extremo.
Como siempre, es más fácil decirlo que hacerlo, especialmente si se establece la limitación de que no desea modificar la biblioteca estándar de Adafruit Neopixel.
Mi primera idea fue conectar la duda a un pin de interrupción en el Arduino. Las funciones de biblioteca de la materia datos en el Neopixels con interrupciones deshabilitadas, por lo que la interrupción (si activado) servicio solamente una vez que terminó de relleno. Pero en principio, podría crear anillos sucesivamente más grandes hasta que no ocurre la interrupción. Por desgracia normalmente debe instanciarse en contexto global para que sea accesible desde setup() y loop(), considerando que tendría que ser instanciada en setup() para implementar la lógica necesaria.
Un método mejor es utilizar contador/temporizador 1 en el modo de contador para contar los pulsos que salen de duda. Esto requiere que conectes duda a 5 Pin, el pin de reloj externo de contador/temporizador 1. Cada píxel requiere de 24 bits de datos (representados por un pulso corto de "0" o un tiempo para "1"), lo único que tienes que hacer es instanciar el mayor tamaño del anillo, luego dividir el número de pulsos contados por 24. Esto te dice cuánto más pequeño es el anillo en uso (si en todos), en comparación con el anillo más grande. Por lo tanto puede calcular el tamaño del anillo real y se puede guardar en una variable global para uso donde sea necesario. No importa que la biblioteca de Adafruit entonces enviará datos a pixeles inexistentes.