Adafruin Neopixel SetSubPixel
- Войдите на сайт для отправки комментариев
Пнд, 18/02/2019 - 06:09
Здравствуйте!
Попытался написать свою процедуру для управления отдельными "сабпикселями", так чтобы при изменении одного из них не затрагивать остальные, как это делает 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" и т.п. для меня - магия, нашел в сети пример вытягивания байтов из лонга.