Проблема с FastLED

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

//Яркость менять только в промежутке (0-255)
#define NUM_BRIGH 255

//Длина линии звезды
#define NUM_TRAKS 5

//количество адрессных лент
#define NUM_TAPE 1

//записывать суда PIN каждой ленты
int NUM_PIN1 = 12;
int NUM_PIN2 = 6;
//Сколько всего пикселей в каждой светодиодной ленте
#define NUM_PIXELS_1 20
#define NUM_PIXELS_2 6
int NUM_PIXELS[] = {20,2};


// Минимальное и максимальное значение для перерыва между звёздами
unsigned long starDurationMIN = 100; 
unsigned long starDurationMAX = 300; 

int currentStarIndex = 0;

// Цвет для падющей звезды в RGB коде



CRGB leds1[NUM_PIXELS_1];
CRGB leds2[NUM_PIXELS_2];
void setup() {
 randomSeed (analogRead(0));
 // Initialize the NeoPixel strip
 
 
 
 Serial.begin(9600);
 
 FastLED.addLeds<WS2812B, NUM_PIN1, GRB>(leds1, NUM_PIXELS_1).setCorrection(TypicalLEDStrip);
 FastLED.addLeds<WS2812B, NUM_PIN2, GRB>(leds2, NUM_PIXELS_2).setCorrection(TypicalLEDStrip);
 
  // меняет яркость в соответствии со значением NUM_BRIGH
  // значение яркости до 255
  FastLED.setBrightness(NUM_BRIGH);
}

void loop() {
  //перерыв между падающими звёздами
 int delayTIME = random (starDurationMIN , starDurationMAX);
 delay(delayTIME);
 //Вызов функции с звездой
 displayStar();

 

}
//Функция для падающих звёзд
void displayStar() {
 // Выберает позицию для начала звезды
 int NUM_UTAPE = random(NUM_TAPE );
 int NUM_TAPES = NUM_TAPE ;
 int starPosition = random(NUM_PIXELS[NUM_TAPES] - NUM_TRAKS);
 Serial.print(NUM_UTAPE);
 if (NUM_UTAPE = 0){
  //Делает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
      leds1[starPosition] = CHSV(0, 255, 0);;
      FastLED.show();
      delay(100);
   }
  starPosition = starPosition - NUM_TRAKS;
  //уберает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
    leds1[starPosition] = CHSV(0,0,0);
    FastLED.show();
    delay(50);
  }
 }
 if (NUM_UTAPE = 1){
  //Делает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
      leds2[starPosition] = CHSV(0, 255, 0);;
      FastLED.show();
      delay(100);
   }
  starPosition = starPosition - NUM_TRAKS;
  //уберает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
    leds2[starPosition] = CHSV(0,0,0);
    FastLED.show();
    delay(50);
  }
 }
 // обновление ленты
 FastLED.show();

 
}

Почему-то ругается на FastLED.addLeds<WS2812B, NUM_PIN1, GRB>(leds1, NUM_PIXELS_1).setCorrection(TypicalLEDStrip); и
FastLED.addLeds<WS2812B, NUM_PIN2, GRB>(leds2, NUM_PIXELS_2).setCorrection(TypicalLEDStrip);

И выдаёт такую ошибку

/sketch/sketch.ino: In function ‘void setup()’:
no matching function for call to ‘CFastLED::addLeds<WS2812B, NUM_PIN1, GRB>(CRGB [20], int)’
In file included from /sketch/sketch.ino:2:0:
In file included from /sketch/sketch.ino:2:0:
In file included from /sketch/sketch.ino:2:0:
/libraries/FastLED/src/FastLED.h:267:130: note: candidate: template<ESPIChipsets CHIPSET, unsigned char DATA_PIN, unsigned char CLOCK_PIN, EOrder RGB_ORDER, long unsigned int SPI_DATA_RATE> CLEDController& CFastLED::addLeds(CRGB*, int, int)
template<ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER, uint32_t SPI_DATA_RATE > CLEDController &addLeds(struct CRGB data, int nLedsOrOffset, int nLedsIfOffset = 0) {
^~~~~~~
In file included from /sketch/sketch.ino:2:0:
/libraries/FastLED/src/FastLED.h:267:130: note: candidate: template<ESPIChipsets CHIPSET, unsigned char DATA_PIN, unsigned char CLOCK_PIN, EOrder RGB_ORDER, long unsigned int SPI_DATA_RATE> CLEDController& CFastLED::addLeds(CRGB
, int, int)
template<ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER, uint32_t SPI_DATA_RATE > CLEDController &addLeds(struct CRGB data, int nLedsOrOffset, int nLedsIfOffset = 0) {
^~~~~~~
In file included from /sketch/sketch.ino:2:0:
/libraries/FastLED/src/FastLED.h:267:130: note: candidate: template<ESPIChipsets CHIPSET, unsigned char DATA_PIN, unsigned char CLOCK_PIN, EOrder RGB_ORDER, long unsigned int SPI_DATA_RATE> CLEDController& CFastLED::addLeds(CRGB
, int, int)
template<ESPIChipsets CHIPSET, uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER, uint32_t SPI_DATA_RATE > CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
^~~~~~~
the value of ‘NUM_PIN1’ is not usable in a constant expression/sketch/sketch.ino:45:61: error: the value of ‘NUM_PIN1’ is not usable in a constant expression
FastLED.addLeds<WS2812B, NUM_PIN1, GRB>(leds1, NUM_PIXELS_1).setCorrection(TypicalLEDStrip);

А ошибки (error:) где?

Вот ошибка :the value of ‘NUM_PIN1’ is not usable in a constant expression/sketch/sketch.ino:45:61: error: the value of ‘NUM_PIN1’ is not usable in a constant expression
FastLED.addLeds<WS2812B, NUM_PIN1, GRB>(leds1, NUM_PIXELS_1).setCorrection(TypicalLEDStrip);

Ну, он же Вам честно написал, что нет такого шаблона.

В Ваших шаблонах в строках №№42 и 43 какие параметры? WS2812B, NUM_PIN1, GRB, так? Т.е. типы у них соответственно ESPIChipsets, uint8_t, EOrder

В FastLed же имеются следующие шаблоны этого метода:

   template<ESPIChipsets CHIPSET,  uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER, uint32_t SPI_DATA_RATE > CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<ESPIChipsets CHIPSET,  uint8_t DATA_PIN, uint8_t CLOCK_PIN > static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<ESPIChipsets CHIPSET,  uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER > static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
#ifdef SPI_DATA
	template<ESPIChipsets CHIPSET> static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<ESPIChipsets CHIPSET, EOrder RGB_ORDER> static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<ESPIChipsets CHIPSET, EOrder RGB_ORDER, uint32_t SPI_DATA_RATE> static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
#endif
	template<template<uint8_t DATA_PIN, EOrder RGB_ORDER> class CHIPSET, uint8_t DATA_PIN, EOrder RGB_ORDER>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<template<uint8_t DATA_PIN, EOrder RGB_ORDER> class CHIPSET, uint8_t DATA_PIN>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<template<uint8_t DATA_PIN> class CHIPSET, uint8_t DATA_PIN>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
#if defined(__FASTLED_HAS_FIBCC) && (__FASTLED_HAS_FIBCC == 1)
  template<uint8_t NUM_LANES, template<uint8_t DATA_PIN, EOrder RGB_ORDER> class CHIPSET, uint8_t DATA_PIN, EOrder RGB_ORDER=RGB>
	static CLEDController &addLeds(struct CRGB *data, int nLeds) {
#endif
#ifdef FASTSPI_USE_DMX_SIMPLE
	template<EClocklessChipsets CHIPSET, uint8_t DATA_PIN, EOrder RGB_ORDER=RGB>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0)
#endif
	template<template<EOrder RGB_ORDER> class CHIPSET, EOrder RGB_ORDER>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {

	template<template<EOrder RGB_ORDER> class CHIPSET>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
#ifdef USE_OCTOWS2811
	template<OWS2811 CHIPSET, EOrder RGB_ORDER>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0)
	template<OWS2811 CHIPSET>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0)
#endif
#ifdef USE_WS2812SERIAL
	template<SWS2812 CHIPSET, int DATA_PIN, EOrder RGB_ORDER>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0)
#endif
#ifdef SmartMatrix_h
	template<ESM CHIPSET>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0)
#endif
#ifdef FASTLED_HAS_BLOCKLESS
	template<EBlockChipsets CHIPSET, int NUM_LANES, EOrder RGB_ORDER>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
	template<EBlockChipsets CHIPSET, int NUM_LANES>
		static CLEDController &addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset = 0) {
#endif

Ну и который из них имеет такие же параметры? Никакой. Вот Вам об этом и сказали.

Вот смотрите первый параметр у Вас ESPIChipsets. Таких шаблонов всего 6 - строки №1-3 и №5-7.
Далее у Вас идёт номер дата-пина. Таки Шаблонов всего 3 - строки №№ 1-3. Но у них у всех третьим параметром идёт клок-пин, а у Вас сразу RGB_ORDER. Вот он и не может выбрать подходящий шаблон.

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

//Яркость менять только в промежутке (0-255)
#define NUM_BRIGH 255

//Длина линии звезды
#define NUM_TRAKS 5

//количество адрессных лент
#define NUM_TAPE 1

//записывать суда PIN каждой ленты
int NUM_PIN1 = 12;
int NUM_PIN2 = 6;
//Сколько всего пикселей в каждой светодиодной ленте
const uint8_t NUM_PIXELS_A = 20;
const uint8_t NUM_PIXELS_B = 6;
int NUM_PIXELS[] = {20,6};


// Минимальное и максимальное значение для перерыва между звёздами
unsigned long starDurationMIN = 100; 
unsigned long starDurationMAX = 300; 

int currentStarIndex = 0;

// Цвет для падющей звезды в RGB коде



struct CGRB leds1[NUM_PIXELS_A];

struct CGRB leds2[NUM_PIXELS_B];

void setup() {
 randomSeed (analogRead(0));
 // Initialize the NeoPixel strip
 
 
 
 Serial.begin(9600);
 
 FastLED.addLeds<WS2812B, NUM_PIN1, GRB>(leds1, NUM_PIXELS_A);
 FastLED.addLeds<WS2812B, NUM_PIN2, GRB>(leds2, NUM_PIXELS_B);
 
  // меняет яркость в соответствии со значением NUM_BRIGH
  // значение яркости до 255
  FastLED.setBrightness(NUM_BRIGH);
}

void loop() {
  //перерыв между падающими звёздами
 int delayTIME = random (starDurationMIN , starDurationMAX);
 delay(delayTIME);
 //Вызов функции с звездой
 displayStar();

 

}
//Функция для падающих звёзд
void displayStar() {
 // Выберает позицию для начала звезды
 int NUM_UTAPE = random(NUM_TAPE );
 int NUM_TAPES = NUM_TAPE ;
 int starPosition = random(NUM_PIXELS[NUM_TAPES] - NUM_TRAKS);
 Serial.print(NUM_UTAPE);
 if (NUM_UTAPE = 0){
  //Делает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
      leds1[starPosition] = CHSV(0, 255, 0);;
      FastLED.show();
      delay(100);
   }
  starPosition = starPosition - NUM_TRAKS;
  //уберает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
    leds1[starPosition] = CHSV(0,0,0);
    FastLED.setBrightness (NUM_BRIGH - NUM_BRIGH * 0.25);
    FastLED.show();
    delay(50);
  }
 }
 if (NUM_UTAPE = 1){
  //Делает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
      leds2[starPosition] = CHSV(0, 255, 0);;
      FastLED.show();
      delay(100);
   }
  starPosition = starPosition - NUM_TRAKS;
  //уберает звёздный путь
  for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
    leds2[starPosition] = CHSV(0,0,0);
    FastLED.setBrightness (NUM_BRIGH - NUM_BRIGH * 0.25);
    FastLED.show();
    delay(50);
  }
 }
 FastLED(NUM_BRIGH);
 // обновление ленты
 FastLED.show();

 
}

Первая ошибка ушла но теперь компилятор ругается на struct
CGRB leds1[NUM_PIXELS_A]; и struct CGRB leds2[NUM_PIXELS_B];

Выдаёт такие ошибки : elements of array ‘CGRB leds1 [20]’ have incomplete type storage size of ‘leds1’ isn’t known и elements of array ‘CGRB leds2 [6]’ have incomplete type error: storage size of ‘leds2’ isn’t known

сам писал что-ли?

Никуда она не ушла, где была, там и осталась. Вы просто вляпали новую, которая проявляется раньше и маскирует ту.

Ну, да. Нет такого типа CGRB . Есть CRGB и CHSV, а того, что Вы написали – нету. Верните правильное написание типа в строках №№ 32 и 34 и тут же получите старую, добрую ошибку про шаблоны, никуда она не ушла.

Не нужно изобретать новые типы, нужно просто правильно написать строки №№44-45. А они потянут за собой строки №№14 и 15 (собственно, собака-то зарыта, главным образом, в них).

Хочу заметить, что это не единствен ошибка компиляции. Например, компилятор решительно не понимает, что у Вас написано в строке №101.

И, да, кстати, в строках №№ 69 и 85 формально ошибки нет, но я бы посоветовал Вам убедиться в том, что Вы действительно понимаете, что там написано.

1 лайк

Чёт я не въеду, проблема решилась? Или ТС забил на неё? Осталось какое-то ощущение зря битых об клавиатуру пальцев.

так извечная проблема - послепраздничный запой )))