Как прочитать цвет в переменную

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

Всем привет!

Возможно плохо искал, но пару дней бьюсь. учитывая что не силен в программировании и пока пытаюсь учиться. Использую библиотеку FastLED и вопрос по ней. Прочитал мануал, но решения не нашел.

Хочется получить от Вас совет, как можно прочитать значение цвета светодиода и запомнить его в переменную, что бы потом, после ряда каких то действий присвоить этот цвет светодиоду.

В мануале нашел как копировать цвет из одного в другой : leds[i] = leds[j]

А мне нужно что-то вроде такого:

x = цвет leds[i] // сохраняем в переменной цвет

...

какой то код

...

и возвращаем цвет leds[i] = x;

Насколько это возможно.

Заранее спасибо!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Возможно. Тип CRGB - это обычный union трех байтов.

uint32_t newColor = 0xFF00FF;
led[i] = newColor;

Но учитывайте, что прочитаете вы не цвет светодиода на страйпе, а значение из массива, который может не отражать действительное положение вещей.

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018
Увы, конструкция не работает:
 
leds[0] = 0xFF00FF;  // присваиваю цвет светодиоду с номером 0 в гирлянде
uint32_t newColor = leds[i]; // считываю установленный цвет в переменную
leds[5] = newColor; // устанавливаю цвет 5-му светодиоду
FastLED.show(); 
 
Попробовал прочитать что в переменной Serial.println(newColor) - в переменной единичка (1)
 
 
 
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Где и как у вас объявлен массив leds ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, ввел в заблуждение. CRGB только внутрь uint32_t засасывает, назад не отдает. Для переноса переменная должна быть или типа CRGB или uint8_t[3] или три переменных по байту:

  CRGB tmpColor;
  leds[0] = 0xFF0000; // CRGB::Red;
  tmpColor = leds[0];
  leds[1] = tmpColor;
  Serial.println(leds[1].red);
  Serial.println(leds[1].green);
  Serial.println(leds[1].blue);

 

Alexandr_KZ
Offline
Зарегистрирован: 22.02.2018

Огромное спасибо! Всё работает!

СПАСИБО!