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" и т.п. для меня - магия, нашел в сети пример вытягивания байтов из лонга.