Buenas tardes.
Estaba probando una tira de LEDs WS2812B y probando la librería "WS2812BStrip.h" cuando me he topado con un problema. Dejo el código a continuación
#include <WS2812BStrip.h>
#include <Arduino.h>
#define PIN 2
#define LED_SIZE 3
using namespace WS2812B;
LED lights[LED_SIZE];
LEDStrip strip(lights, LED_SIZE);
void sendToStrip(LED* l){
for(int i = 0; i < LED_SIZE; i++){
lights[i].red = l->red;
lights[i].green = l->green;
lights[i].blue = l->blue;
}
strip.write(PIN);
}
void setup(){
initLEDStrip(lights, LED_SIZE);
Serial.begin(115200); //LINEA COMENTARIO 1
pinMode(5, INPUT);
}
void loop(){
LED l;
l.red = 0;
l.green = 0;
l.blue = 64;
sendToStrip(&l);
while(true){ //LINEA COMENTARIO 2
delay(1);
if(digitalRead(5)){
Serial.println("Boton pulsado");
}
}
}
Al código del procedimiento sendToStrip(LED* l), se le pasa un LED (objeto de la librería WS2812BStrip), modifica la tira de leds a ese color y lo escribe.
Las conexiones son correctas ya que con el programa de ejemplo funciona a la perfección.
Los problemas que me he encontrado son los siguientes. Para cada punto, el error se mantiene igual por cada compilación, dando siempre los mismos resultados:
- Si elimino el código del bucle (línea comentario 2), se me encienden LED_SIZE leds de la tira en color azul, tal como indico al inicio del procedimiento loop.
- Al insertar el código (tal cual lo he dejado arriba), los leds se encienden con colores aleatorios.
- Si la línea Serial.begin(115200); del procedimiento setup();, se mueve dentro del procedimiento, se muestra un patrón de color distinto por cada una de las posiciones donde lo deje. Lo mismo ocurre con el delay(1);, si se cambia de posición o se elimina, el patrón cambia (aunque en este caso es parecido entre cambios).
Llevo ya un rato intentando ver por que ocurre. No parece que sea de la librería, debido a que he probado de añadir un delay grande entre el sendToStrip y el bucle, obteniendo el mismo resultado.
Un saludo!