Как правильно работать с этим массивом?

Я использую светодиодную ленту WS2812b, ESP8266 (NodeMCU 1.0) и датчик жестов APDS9960. Я хочу, чтобы при движении руки слева направо и справа налево менялись цвета полоски светодиодов, предварительно сохраненные в массиве строк:< /п>

const char * colors [11] = {"CRGB :: White", 
"CRGB :: WhiteSmoke", 
"CRGB :: CadetBlue", 
"CRGB :: SteelBlue", 
"CRGB :: Teal", 
"CRGB :: SlateGray" , 
"CRGB :: MediumPurple", 
"CRGB :: Purple", 
"CRGB :: PapayaWhip", 
"CRGB :: LightPink", 
"CRGB :: Crimson"};

Но когда я собираюсь включить цвета с помощью функций библиотеки FastLed таким образом:

for (int i = 0; i <NUM_LEDS; i = i + 1) {
       leds [i] = colors [2];
       FastLED.show ();
       delay (10);}

Все, что я получаю, это эта ошибка:

недопустимое преобразование из 'const char *' в 'uint32_t {он же беззнаковый int}' [-fpermissive]

Думаю, проблема во мне во мне при объявлении массива. Может ли кто-нибудь мне помочь?

, 👍1


1 ответ


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

3

Вам не нужен массив строк, содержащий (плохо отформатированные) имена переменных. Вместо этого вам нужен массив 32-битных целых чисел, содержащий значения, содержащиеся в этих переменных.

const uint32_t colors[] = {
    CRGB::White, 
    CRGB::WhiteSmoke, 
    CRGB::CadetBlue, 
    CRGB::SteelBlue, 
    CRGB::Teal, 
    CRGB::SlateGray, 
    CRGB::MediumPurple, 
    CRGB::Purple, 
    CRGB::PapayaWhip, 
    CRGB::LightPink, 
    CRGB::Crimson
};

Поскольку цвета — это просто числа, в (шестнадцатеричной) форме 0xRRGGBB вы просто сохраняете их как 32-битные целые числа без знака. Имена, которые у вас есть, представляют собой именно такие (постоянные) переменные, используемые для удобства использования (CRGB::White — это 0xFFFFFF).

,

Спасибо!!! Ваша рекомендация сработала правильно!!! Еще раз спасибо!!!, @k.Cyborg