Непонятки с #if

Пишу в песочнице, потому что проблема явно детская ))

Не могу понять, где я что делаю не так. Вот код

#include <FastLED.h>

#define CHIPSET WS2812B
#define EORDER GRB
#define DISPLAY_CLK_PIN 11
#define DISPLAY_DIN_PIN 10

CRGB leds[256];

void setup(void)
{
#if CHIPSET == WS2801
  FastLED.addLeds<CHIPSET, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, EORDER>(leds, 256);
#else
  FastLED.addLeds<CHIPSET, DISPLAY_DIN_PIN, EORDER>(leds, 256);
#endif
}

void loop(void) {}

По моему разумению должна отрабатывать строка 15, но компилятор ее не видит, вместо нее берет строку 13. Естественно, с ошибкой компиляции, но ошибка абсолютно справедливая ))

Собственно, строка 15 почему-то затенена. Где я туплю? ))

Ну, Вы, как первый день. Где ошибка-то?

А что такое WS2812B?? И с чего ты решил, что оно поддается сравнению?

2 лайка

#ifdef
#ifndef

3 лайка

Ошибка несоответсвия параметрам функции. Потому как для WS2812B параметры должны быть другими. Они прописаны в строке 15

Это идентификатор, а не переменная. Потому и сравнивать надо через #ifdef.

Без разницы. Все то же самое ))

Что то же? Вам же Петрович дал задание - выполняйте. А сами всегда требуете у новичков :slightly_smiling_face:

#include <FastLED.h>

#define CHIPSET WS2812B
#define EORDER GRB
#define DISPLAY_CLK_PIN 11
#define DISPLAY_DIN_PIN 10

CRGB leds[256];

void setup(void)
{
#ifndef CHIPSET
  FastLED.addLeds<CHIPSET, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, EORDER>(leds, 256);
#else
  FastLED.addLeds<CHIPSET, DISPLAY_DIN_PIN, EORDER>(leds, 256);
#endif
}

void loop(void) {}

Еще раз - проблема не в ошибке компиляции, а в том, что компилируется не та строка - 13 вместо 15 ))

Закоментируй 3-ю. И сделай как у Толстого. Только 12 #ifdef.

Что это даст?

#define CHIPSET_WS2812B 1
#if CHIPSET_WS2812B
2 лайка

поменяйте строки местами. Может тупо какой то управляющий символ в редакторе случайно поставился. Или ручками перепишите строку. Такое иногда тоже бывает.

@rkit сдался и написал ответ :smiley:

Собственно, моя задача - сделать универсальную функцию для задания параметров ленты в зависимости от заданного чипа.
По видимому, прав таки @rkit - я пытаюсь сравнивать несравнимое ))

а как вам такое в Wokwi

Это возможно, но чипов может быть много, все так замучаюсь перечислять ))
Видимо, нужно думать больше…

да, просто надо задефайнить еще и WS2812B

//#define WS1812B 1
#define WS1812C 1

#if defined WS1812B

#elif defined WS1812C

#endif
Комментируешь неиспользуемые, оставляешь нужную.
Либо:
#define WS1812B 0 //не используется
#define WS1812C 1 //используется

#if WS1812B

#elif WS1812C

#endif

Как то коряво дописал сначала. Не весь экран видно.)

Да, раньше так и делал. Захотелось покрасивше сделать ))

  // Раскомментируйте/отредактируйте одну из следующих строк для используемой вами матрицы
  // FastLED.addLeds<TM1803, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<TM1804, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<TM1809, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<WS2811, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<WS2812, DISPLAY_DIN_PIN, RGB>(leds, 256);
  FastLED.addLeds<WS2812B, DISPLAY_DIN_PIN, GRB>(leds, 256);
  // FastLED.addLeds<NEOPIXEL, DISPLAY_DIN_PIN>(leds, 256);
  // FastLED.addLeds<APA104, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<UCS1903, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<UCS1903B, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<GW6205, DISPLAY_DIN_PIN, RGB>(leds, 256);
  // FastLED.addLeds<GW6205_400, DISPLAY_DIN_PIN, RGB>(leds, 256);

  // FastLED.addLeds<WS2801, RGB>(leds, 256);
  // FastLED.addLeds<SM16716, RGB>(leds, 256);
  // FastLED.addLeds<LPD8806, RGB>(leds, 256);
  // FastLED.addLeds<P9813, RGB>(leds, 256);
  // FastLED.addLeds<APA102, RGB>(leds, 256);
  // FastLED.addLeds<DOTSTAR, RGB>(leds, 256);

  // FastLED.addLeds<WS2801, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);
  // FastLED.addLeds<SM16716, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);
  // FastLED.addLeds<LPD8806, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);
  // FastLED.addLeds<P9813, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);
  // FastLED.addLeds<APA102, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);
  // FastLED.addLeds<DOTSTAR, DISPLAY_DIN_PIN, DISPLAY_CLK_PIN, RGB>(leds, 256);