Определите предустановленные цвета с помощью библиотеки FastLed

led

Я использую адресуемую светодиодную ленту на 150 светодиодов и Arduino Nano для ее управления с помощью библиотеки FastLed.

Я пытаюсь создать функцию turn_on_leds, которая получает 4 параметра:

1) время задержки включения светодиода в шлейфе, 2) направление (пока не актуально), 3) индекс цвета для массива colors, 4) процент яркости.

Проблема № 1: цветовой массив определен для выбора из предустановленных определений цветов (Установлена ссылка, но при выборе col_indx =2, что означает colors[2], светодиоды не горят красным, как они должны, И при установке leds[i]=0xFF0000 устанавливается правильный результат.

Проблема №2: в loop есть for, предназначенный для повышения яркости с 0 до 100, НО результаты равны 0 для первой итерации и 9 для всех остальных.

Будем благодарны за любую ПОМОЩЬ!

Парень

Код:

#include <FastLED.h>

#define NUM_LEDS 10
#define BRIGHTNESS  55
#define DATA_PIN 7

char *colors[] = {0x000000,0xFFFFFF,0xFF0000,0x008000,0x0000FF}; // черный, белый,r,g,b
CRGB leds[NUM_LEDS];
int t = 0;

void setup() {
  Serial.begin(9600);
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  // FastLED.setBrightness(ЯРКОСТЬ);
}


void turn_leds_on(int del_1, bool dir_1, int col_indx, int bright_1) {
  if (dir_1 == true ) { // от начала до конца
    for (int i = 0; i <= NUM_LEDS; i++) {
      leds[i] = 0xFF0000;//colors[col_indx];
      FastLED.setBrightness(bright_1*255/100);
      FastLED.show();
      delay(del_1);
    }
  }
}


void loop() {
  Serial.println(t);
  turn_leds_on(50, true, 2, 100);
  delay(1000);
  // Turn_leds_on(50, true, 0, t);
  // задержка(1000);

  if (t < 100 ) {
    t += 10;
  }
  else {
    t = 0;
  }
} 

, 👍0


1 ответ


Лучший ответ:

1

Ваш массив colors должен иметь тип CRGB, а не char *.

CRGB colors[] = {0x000000,0xFFFFFF,0xFF0000,0x008000,0x0000FF}; // черный, белый,r,g,b

Вторая проблема: вы выходите за пределы массива светодиодов:

for (int i = 0; i <= NUM_LEDS; i++) {
  leds[i] = 0xFF0000;//colors[col_indx];

Вы идете от 0 до 10 включительно. Это 11 итераций. Не существует такого фрагмента массива, как leds[10], поэтому записываемое в него значение в конечном итоге перезаписывает следующие два байта в памяти - и они оказываются занятыми переменной t.

,

Спасибо. это решило проблему 1, а как насчет 2?, @Guy . D

@Guy.D Вы выходите за пределы массива., @Majenko

ОМГ, ты так ПРАВ. Спасибо!, @Guy . D