Adafruin Neopixel SetSubPixel

Нет ответов
zotoxx
Offline
Зарегистрирован: 18.02.2019

Здравствуйте!

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

#include <Adafruit_NeoPixel.h>
// data pin
#define PIN 6
// led count
#define LEDCNT 16
int LedPos = 0;
Adafruit_NeoPixel RING1 = Adafruit_NeoPixel(LEDCNT, PIN, NEO_GRB + NEO_KHZ800);


void setup()
{
  RING1.begin();
  RING1.show();
}


void SetSubPixel(int LedNum, int SubPixelColor, int ColorVol)
{ // SubPixel: 1-red, 2-green, 3-blue
long Color32= RING1.getPixelColor(LedNum); //Получает 32-битный цвет LedNum-го пикселя
int SubPixelRed = (int)(Color32 & 0x000000ff); //Первый байт — красный цвет
int SubPixelGreen = (int)(Color32 & 0x0000ff00); //Второй байт — зеленый цвет
int SubPixelBlue = (int)(Color32 & 0x00ff0000); //Третий байт — синий цвет
switch (SubPixelColor) { 
case 1: SubPixelRed = ColorVol;
case 2: SubPixelGreen = ColorVol;
case 3: SubPixelBlue = ColorVol;
break;
} // end of switch (SubPixelColor)
RING1.setPixelColor(LedNum, SubPixelRed, SubPixelGreen, SubPixelBlue);
} // end of void SetSubPixel
// пример вызова SetSubPixel(12, 2, 255);

void loop()
{
 SetSubPixel(LedPos, 3, 5);
 RING1.show();
 delay(333);
 LedPos++;
 if (LedPos > 15) LedPos=0;
}

Если вызвать SetSubPixel(LedPos, 1, 127); или SetSubPixel(LedPos, 2, 127), закрашивает белым; если SetSubPixel(LedPos, 3, 127), то сначала синим, как и задумывалось, затем маджентой.

Где ошибка?

P.S. Строки с "Color32 & 0x000000ff" и т.п. для меня - магия, нашел в сети пример вытягивания байтов из лонга.