Buenas noches a todo/as, estoy embarcado en un pequeño proyecto de controlar, mediante un joystick un par e tiras led WS2812B con Arduino Uno WIFI Rev2 y varias librerias, la del ejemplo es con fastled, aunque estoy con adafruit neopixel.
Este es el código que estoy empleando;
#include <FastLED.h>
#define NUM_LEDS 61
CRGBArray<NUM_LEDS> ledsi;
CRGBArray<NUM_LEDS> ledsd;
int X; // variable para almacenar valor leido del eje X
int Y; // variable para almacenar valor leido del eje y
//int LED_IZQUIERDO = 3; // Giro izquierdo a pin digital 3 (No usado)
//int LED_DERECHO = 5; // Giro derecho a pin digital 5 (No usado)
int IZQD_ABAJO = 6; // Izquierda hacia abajo a pin digital 6
int DRCH_ARRIBA = 9; // Derecha hacia arriba a pin digital 9
int PULSADOR = 10; // pulsador incorporado pin digital 10
int PITO_SW = 11; // PITO de pulsador a pin digital 11
int SW; // variable para almacenar valor leido del pulsador
void setup(){
FastLED.addLeds<NEOPIXEL,6>(ledsi, NUM_LEDS);
FastLED.addLeds<NEOPIXEL,9>(ledsd, NUM_LEDS);
//pinMode(LED_IZQUIERDO, OUTPUT); // LED como salida(No usado)
//pinMode(LED_DERECHO, OUTPUT); // LED como salida(No usado)
pinMode(IZQD_ABAJO, OUTPUT); // TIRALED IZQD como salida
pinMode(DRCH_ARRIBA, OUTPUT); // TIRALED DRCH como salida
pinMode(PITO_SW, OUTPUT); // PITO como salida
pinMode(PULSADOR, INPUT); // pulsador como entrada
// entradas analogicas no requieren inicializacion A0-A1
}
void loop(){
X = analogRead(A0); // lectura de valor de eje x
Y = analogRead(A1); // lectura de valor de eje x
SW = digitalRead(PULSADOR); // lectura de valor de pulsador
// if (X >= 0 && X < 480){ // si X esta en la zona izquierda(No usado)
// } else {
// }
// if (X > 520 && X <= 1023){ // si X esta en la zona derecha(No usado)
// } else {
// }
if (Y >= 0 && Y < 480){ // si Y esta en la zona de abajo (Izquierda)
static uint8_t hue;
for(int i = 0; i < NUM_LEDS/2; i++) {
// fade everything out
ledsi.fadeToBlackBy(40);
// let's set an led value
ledsi[i] = CHSV(255,255,100);
hue++; //con esto en alguno de los colores conseguimos que cambien aleatoriamente
// now, let's first 20 leds to the top 20 leds,
ledsi(NUM_LEDS/2,NUM_LEDS-1) = ledsi(NUM_LEDS/2 - 1 ,0);
FastLED.delay(33);
}
}
// else {
// analogWrite(IZQD_ABAJO, 0); // Y en zona de reposo, apago TIRALED
// }
if (Y > 520 && Y <= 1023){ // si Y esta en la zona de arriba
static uint8_t hue;
for(int i = 0; i < NUM_LEDS/2; i++) {
// fade everything out
ledsd.fadeToBlackBy(40);
// let's set an led value
ledsd[i] = CHSV(255,255,100);
// hue++ con esto en alguno de los colores conseguimos que cambien aleatoriamente
// now, let's first 20 leds to the top 20 leds,
ledsd(NUM_LEDS/2,NUM_LEDS-1) = ledsd(NUM_LEDS/2 - 1 ,0);
FastLED.delay(33);
}
}
// else {
// analogWrite(DRCH_ARRIBA, 0); // Y en zona de reposo, apaga TIRALED
// }
digitalWrite(PITO_SW, !SW); // escribe en LED valor opuesto al leido del pulsador
FastLED.clear();
}
//He intentado ponerlo como bucle pero no me deja.
//void efecto1(){
// static uint8_t hue;
// for(int i = 0; i < NUM_LEDS/2; i++) {
// // fade everything out
// ledsi.fadeToBlackBy(40);
//
// // let's set an led value
// ledsi[i] = CHSV(255,255,100);
// // hue++; con esto en alguno de los colores conseguimos que cambien aleatoriamente
//
// // now, let's first 20 leds to the top 20 leds,
// ledsi(NUM_LEDS/2,NUM_LEDS-1) = ledsi(NUM_LEDS/2 - 1 ,0);
// FastLED.delay(33);
// }
//}
//
//void efecto2(){
// static uint8_t hue;
// for(int i = 0; i < NUM_LEDS/2; i++) {
// // fade everything out
// ledsd.fadeToBlackBy(40);
//
// // let's set an led value
// ledsd[i] = CHSV(255,255,100);
// // hue++ ; con esto en alguno de los colores conseguimos que cambien aleatoriamente
//
// // Efecto led, de extremos al centro
// ledsd(NUM_LEDS/2,NUM_LEDS-1) = ledsd(NUM_LEDS/2 - 1 ,0);
// FastLED.delay(33);
// }
//}
Ahora funciona cada vez que le doy al mando. Estoy intentando que permanezca la tira led encendida durante 5 segundos en bucle y se apague, pero no hay manera, una vez activado el mando derecha hace el movimiento de leds y se queda encendido hasta que giro al otro lado, se apaga la tira led encendida ,pero se queda la otra encendida una vez terminado el movimiento de los leds.
Si alguien puede darme alguna idea......
Muchísimas gracias, un cordial saludo.