#include <Adafruit_NeoPixel.h>
#define PIN 15 // El pin al que está conectado el anillo de LEDs NeoPixel
#define NUMPIXELS 16
#define LED_PIN 32 // El número de LEDs en el anillo
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
TaskHandle_t neopixelTask;
TaskHandle_t ledTask;
void neopixelTaskFunction(void *pvParameters) {
(void)pvParameters;
// Inicializa los NeoPixels
pixels.begin();
pixels.show(); // Inicializa todos los LEDs a apagado
while (1) {
// Cambia el color de todos los LEDs a rojo
colorWipe(pixels.Color(255, 0, 0), 50);
vTaskDelay(500 / portTICK_PERIOD_MS);
// Cambia el color de todos los LEDs a verde
colorWipe(pixels.Color(0, 255, 0), 50);
vTaskDelay(500 / portTICK_PERIOD_MS);
// Cambia el color de todos los LEDs a azul
colorWipe(pixels.Color(0, 0, 255), 50);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void ledTaskFunction(void *pvParameters) {
while (1) {
digitalWrite(LED_PIN, HIGH); // Enciende el LED
vTaskDelay(1000 / portTICK_PERIOD_MS); // Espera 1 segundo
digitalWrite(LED_PIN, LOW); // Apaga el LED
vTaskDelay(1000 / portTICK_PERIOD_MS); // Espera 1 segundo
}
}
void setup() {
pinMode(LED_PIN, OUTPUT); // Configura el pin del LED como salida
xTaskCreate(neopixelTaskFunction, "NeoPixelTask", 4096, NULL, 1, &neopixelTask);
xTaskCreate(ledTaskFunction, "LED Task", 1024, NULL, 1, &ledTask); // Crea la tarea LED
}
void loop() {
// No es necesario usar loop() en este ejemplo ya que el control se maneja en la tarea.
}
// Función para llenar el anillo de LEDs con un solo color
void colorWipe(uint32_t color, int wait) {
for (int i = 0; i < pixels.numPixels(); i++) {
pixels.setPixelColor(i, color);
pixels.show();
vTaskDelay(wait / portTICK_PERIOD_MS);
}
}