No tengo conocimiento si exista incompatibilidad del delay con la libreria <Adafruit_NeoPixel.h> pero podrias usar el delay en microsegundos, aqui esta la referencia delay en uS
Consiste en definir solo la siguiente linea a diferencia del delay normal
delayMicroseconds(50); // pauses for 50 microseconds
Tenés un error conceptual que te lleva a cometer 3 errores en el código.
El primer pixel tiene índice 0, o sea, el número de cada pixel va de 0 a NUMPIXELS - 1.
Por ej. para una tira de 16 leds, el primero es el 0 y el último es el 15.
Entonces en derecha()
for (int i=1; i<NUMPIXELS; i++) {
debería ser
for (int i=0; i<NUMPIXELS; i++)
Sino el led 0 no se enciende.
Nota que aquí está bien que
i < NUMPIXELS
ya que i solo "llega" hasta NUMPIXELS - 1.
Pero en el caso de izquierda()
for (int i=NUMPIXELS; i > 0 ; i--)
es incorrecto porque el led 900 no existe, el último es el 899 (porque es 900 - 1).
No genera error porque evidentemente la librería no verifica que el parámetro sea correcto.
Por otro la lado, como el lazo termina en i > 0 , otra vez el led 0 no se enciende.
Lo correcto es
Porque después de encender siempre quedaba el primer led encendido,digo pues no enciendo el primero y así no tengo que apagarlo. ahora entiendo por que.
¿Que llamas a, "va lento" ?
En realidad creo que hay un error de concepto en tu programa. No trabaje con la libreria, pero tu estructura FOR se completa en milisegundos, si estuvieras trabajando solo con led, sin librería, el ojo humano no podría discernir ningún cambio. Creo que tendrías que escribir un programa "mas lento" utilizando milis para controlar exactamente los tiempos de encendido de leds.
¿Vos entendés lo que estás haciendo? ¿Sabés como trabajan los WS2812?
Es obvio que si tenés que manejar 900 LEDs va a tardar unas 4.5 veces más que si tenés que manejar 200.
Si vos le decís al micro que tiene "colgados" 900 va a generar datos para 900, si colocas solo 200 pierde tiempo enviando datos a 700 leds que no existen.
Ok,tengo 900 led como puedo mejorar para que corra mas,o fluya,vamos en resumen que llegue antes la info a los led para que se enciendan antes? O no es problema del procesador? Sería la propia tira led el problema? Por lo que entiendo,no puedes encender 900 led al mismo tiempo,ya que tarda en llegar la info al último led?
Según el datasheet, el WS2812 necesita de un tiempo de 1.25us con diferencia de +-600ns; en el peor de los casos necesitas de 1.256us para transferencia de datos, yo lo considero un buen tiempo pero si tu dices que va muy lento, podrias utilizar otro MCU para pruebas, ya que la libreria tiene compatibilidad con múltiples tarjetas, como el ESP8266 o el ESP32.