fix things for two leds at same position
This commit is contained in:
parent
968507ad7b
commit
bcfc1bcd4d
|
@ -132,9 +132,9 @@ void NeoPatterns::RainbowCycle(uint8_t interval, direction dir) {
|
|||
|
||||
void NeoPatterns::RainbowCycleUpdate()
|
||||
{
|
||||
for (int i = 0; i < numPixels(); i++)
|
||||
for (int i = 0; i < NUMDOTS; i++)
|
||||
{
|
||||
setPixelColor(i, Wheel(((i * 256 / numPixels()) + Index) & 255));
|
||||
setPixelColorMapped(i, Wheel(((i * 256 / NUMDOTS) + Index) & 255));
|
||||
}
|
||||
show();
|
||||
Increment();
|
||||
|
@ -143,22 +143,22 @@ void NeoPatterns::RainbowCycleUpdate()
|
|||
void NeoPatterns::TheaterChase(uint32_t color1, uint32_t color2, uint8_t interval, direction dir) {
|
||||
ActivePattern = THEATER_CHASE;
|
||||
Interval = interval;
|
||||
TotalSteps = numPixels();
|
||||
TotalSteps = NUMDOTS;
|
||||
Color1 = color1;
|
||||
Color2 = color2;
|
||||
Index = 0;
|
||||
Direction = dir;
|
||||
}
|
||||
void NeoPatterns::TheaterChaseUpdate() {
|
||||
for (int i = 0; i < numPixels(); i++)
|
||||
for (int i = 0; i < NUMDOTS; i++)
|
||||
{
|
||||
if ((i + Index) % 3 == 0)
|
||||
{
|
||||
setPixelColor(i, Color1);
|
||||
setPixelColorMapped(i, Color1);
|
||||
}
|
||||
else
|
||||
{
|
||||
setPixelColor(i, Color2);
|
||||
setPixelColorMapped(i, Color2);
|
||||
}
|
||||
}
|
||||
show();
|
||||
|
@ -169,7 +169,7 @@ void NeoPatterns::ColorWipe(uint32_t color, uint8_t interval, direction dir)
|
|||
{
|
||||
ActivePattern = COLOR_WIPE;
|
||||
Interval = interval;
|
||||
TotalSteps = numPixels();
|
||||
TotalSteps = NUMDOTS;
|
||||
Color1 = color;
|
||||
Index = 0;
|
||||
Direction = dir;
|
||||
|
@ -178,7 +178,7 @@ void NeoPatterns::ColorWipe(uint32_t color, uint8_t interval, direction dir)
|
|||
// Update the Color Wipe Pattern
|
||||
void NeoPatterns::ColorWipeUpdate()
|
||||
{
|
||||
setPixelColor(Index, Color1);
|
||||
setPixelColorMapped(Index, Color1);
|
||||
show();
|
||||
Increment();
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ void NeoPatterns::Scanner(uint32_t color1, uint8_t interval, bool colorful, bool
|
|||
{
|
||||
ActivePattern = SCANNER;
|
||||
Interval = interval;
|
||||
TotalSteps = (numPixels() - 1) * 2;
|
||||
TotalSteps = (NUMDOTS - 1) * 2;
|
||||
Color1 = color1;
|
||||
Index = 0;
|
||||
wPos = 0;
|
||||
|
@ -208,7 +208,7 @@ void NeoPatterns::ScannerUpdate()
|
|||
wPos++;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < numPixels(); i++)
|
||||
for (int i = 0; i < NUMDOTS; i++)
|
||||
{
|
||||
int finalpos;
|
||||
if (spiral) {
|
||||
|
@ -220,15 +220,15 @@ void NeoPatterns::ScannerUpdate()
|
|||
}
|
||||
if (i == Index) // Scan Pixel to the right
|
||||
{
|
||||
setPixelColor(finalpos, Color1);
|
||||
setPixelColorMapped(finalpos, Color1);
|
||||
}
|
||||
else if (i == TotalSteps - Index) // Scan Pixel to the left
|
||||
{
|
||||
setPixelColor(finalpos, Color1);
|
||||
setPixelColorMapped(finalpos, Color1);
|
||||
}
|
||||
else // Fading tail
|
||||
{
|
||||
setPixelColor(finalpos, DimColor(getPixelColor(finalpos)));
|
||||
setPixelColorMapped(finalpos, DimColor(getPixelColorMapped(finalpos)));
|
||||
}
|
||||
}
|
||||
show();
|
||||
|
@ -283,9 +283,9 @@ void NeoPatterns::RandomFadeSingle(uint8_t interval, uint8_t speed) {
|
|||
}
|
||||
|
||||
void NeoPatterns::RandomFadeSingleUpdate() {
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
pixelR_buffer[i] += random(0, random(0, WheelSpeed + 1) + 1); //use buffer red channel for color wheel
|
||||
setPixelColor(i, Wheel(pixelR_buffer[i]));
|
||||
setPixelColorMapped(i, Wheel(pixelR_buffer[i]));
|
||||
}
|
||||
show();
|
||||
Increment();
|
||||
|
@ -293,7 +293,7 @@ void NeoPatterns::RandomFadeSingleUpdate() {
|
|||
|
||||
void NeoPatterns::RandomBuffer()
|
||||
{
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
uint32_t c = Wheel(random(0, 256));
|
||||
pixelR_buffer[i] = (uint8_t)(c >> 16);
|
||||
pixelG_buffer[i] = (uint8_t)(c >> 8);
|
||||
|
@ -305,8 +305,8 @@ void NeoPatterns::Random()
|
|||
{
|
||||
None(); // Stop all other effects
|
||||
ActivePattern = RANDOM;
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
setPixelColor(i, Wheel(random(0, 256)));
|
||||
for (uint8_t i = 0; i < NUMDOTS; i++) {
|
||||
setPixelColorMapped(i, Wheel(random(0, 256)));
|
||||
}
|
||||
show();
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ void NeoPatterns::Smooth(uint8_t wheelSpeed, uint8_t smoothing, uint8_t strength
|
|||
movingPoint_x = 3;
|
||||
movingPoint_y = 3;
|
||||
// Clear buffer (from previous or different effects)
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
pixelR_buffer[i] = 0;
|
||||
pixelG_buffer[i] = 0;
|
||||
pixelB_buffer[i] = 0;
|
||||
|
@ -401,18 +401,18 @@ void NeoPatterns::SmoothUpdate() {
|
|||
movingPoint_x = startx;
|
||||
movingPoint_y = starty;
|
||||
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
pixelR_buffer[i] = (Smoothing / 100.0) * pixelR[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelR, i, 0, 0);
|
||||
pixelG_buffer[i] = (Smoothing / 100.0) * pixelG[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelG, i, 0, 0);
|
||||
pixelB_buffer[i] = (Smoothing / 100.0) * pixelB[i] + (1.0 - (Smoothing / 100.0)) * getAverage(pixelB, i, 0, 0);
|
||||
|
||||
}
|
||||
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
pixelR[i] = pixelR_buffer[i];
|
||||
pixelG[i] = pixelG_buffer[i];
|
||||
pixelB[i] = pixelB_buffer[i];
|
||||
setPixelColor(i, pixelR[i], pixelG[i], pixelB[i]);
|
||||
setPixelColorMapped(i, Color(pixelR[i], pixelG[i], pixelB[i]));
|
||||
}
|
||||
|
||||
show();
|
||||
|
@ -444,17 +444,17 @@ void NeoPatterns::Icon(uint8_t fontchar, String iconcolor, uint8_t interval)
|
|||
|
||||
void NeoPatterns::IconUpdate()
|
||||
{
|
||||
for (int i = 0; i < numPixels(); i++) {
|
||||
for (int i = 0; i < NUMDOTS; i++) {
|
||||
uint64_t mask = 1LL << (uint64_t)i;
|
||||
|
||||
if ( (font[FontChar]&mask) == 0) {
|
||||
setPixelColor(numToPos(i), Color(0, 0, 0)); //bit is 0 at pos i
|
||||
setPixelColorMapped(numToPos(i), Color(0, 0, 0)); //bit is 0 at pos i
|
||||
} else {
|
||||
float _brightness = 1.0 - ( (TotalSteps - Index) * 1.0 / TotalSteps );
|
||||
uint8_t _r = (uint8_t)(Color1 >> 16);
|
||||
uint8_t _g = (uint8_t)(Color1 >> 8);
|
||||
uint8_t _b = (uint8_t)Color1;
|
||||
setPixelColor(numToPos(i), Color(_r * _brightness, _g * _brightness, _b * _brightness)); //bit is 1 at pos i
|
||||
setPixelColorMapped(numToPos(i), Color(_r * _brightness, _g * _brightness, _b * _brightness)); //bit is 1 at pos i
|
||||
}
|
||||
}
|
||||
show();
|
||||
|
@ -532,9 +532,9 @@ void NeoPatterns::PlasmaUpdate()
|
|||
color_4 *= color_4;
|
||||
|
||||
// Scale the color up to 0..7 . Max brightness is 7.
|
||||
//strip.setPixelColor(col + (edge * row), strip.Color(color_4, 0, 0) );
|
||||
//strip.setPixelColorMapped(col + (edge * row), strip.Color(color_4, 0, 0) );
|
||||
|
||||
setPixelColor(xyToPos(row, col), Color(color_1, color_2, color_3));
|
||||
setPixelColorMapped(xyToPos(row, col), Color(color_1, color_2, color_3));
|
||||
}
|
||||
}
|
||||
show();
|
||||
|
@ -561,9 +561,9 @@ uint32_t NeoPatterns::DimColor(uint32_t color)
|
|||
// Set all pixels to a color (synchronously)
|
||||
void NeoPatterns::ColorSet(uint32_t color)
|
||||
{
|
||||
for (int i = 0; i < numPixels(); i++)
|
||||
for (int i = 0; i < NUMDOTS; i++)
|
||||
{
|
||||
setPixelColor(i, color);
|
||||
setPixelColorMapped(i, color);
|
||||
}
|
||||
show();
|
||||
}
|
||||
|
@ -615,18 +615,32 @@ uint32_t NeoPatterns::Wheel(byte WheelPos)
|
|||
}
|
||||
|
||||
// Convert x y pixel position to matrix position
|
||||
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
||||
if (y % 2 == 0) {
|
||||
return (y * WIDTH + x);
|
||||
} else {
|
||||
return (y * WIDTH + (WIDTH-1 - x));
|
||||
#ifdef LEDBOX3X6
|
||||
uint8_t ledbox3x6_mapping[6][3] = {
|
||||
{0,1,2},
|
||||
{5,4,3},
|
||||
{6,7,8},
|
||||
{15,14,9},
|
||||
{16,13,10},
|
||||
{17,12,11}
|
||||
};
|
||||
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
||||
return ledbox3x6_mapping[x][y];
|
||||
}
|
||||
}
|
||||
#else
|
||||
uint8_t NeoPatterns::xyToPos(int x, int y) {
|
||||
if (y % 2 == 0) {
|
||||
return (y * WIDTH + x);
|
||||
} else {
|
||||
return (y * WIDTH + (WIDTH-1 - x));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//convert pixel number to actual 8x8 matrix position
|
||||
uint8_t NeoPatterns::numToPos(int num) {
|
||||
int x = num % 8;
|
||||
int y = num / 8;
|
||||
int x = num % WIDTH;
|
||||
int y = num / HEIGHT;
|
||||
return xyToPos(x, y);
|
||||
}
|
||||
|
||||
|
@ -714,5 +728,21 @@ uint32_t NeoPatterns::parseColor(String value) {
|
|||
}
|
||||
|
||||
|
||||
void NeoPatterns::setPixelColorMapped(uint8_t i, uint32_t c){
|
||||
#ifdef LEDBOX3X6
|
||||
setPixelColor(i*2,c);
|
||||
setPixelColor(i*2+1,c);
|
||||
#else
|
||||
setPixelColor(i,c);
|
||||
#endif
|
||||
}
|
||||
uint32_t NeoPatterns::getPixelColorMapped(uint8_t i){
|
||||
|
||||
#ifdef LEDBOX3X6
|
||||
return getPixelColor(i*2);
|
||||
#else
|
||||
return getPixelColor(i);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -53,6 +53,8 @@ class NeoPatterns : public Adafruit_NeoPixel
|
|||
uint8_t numToPos(int num);
|
||||
uint8_t getAverage(uint8_t array[], uint8_t i, int x, int y);
|
||||
uint32_t parseColor(String value);
|
||||
void setPixelColorMapped(uint8_t i, uint32_t c);
|
||||
uint32_t getPixelColorMapped(uint8_t i);
|
||||
private:
|
||||
|
||||
// Member Variables:
|
||||
|
|
|
@ -1,16 +1,27 @@
|
|||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
|
||||
|
||||
//8x8 Matrix
|
||||
/*
|
||||
|
||||
#define HOSTNAME "pixelprojektor"
|
||||
#define NODENAME "pixel"
|
||||
#define WIDTH 8 //WIDTH is along consecutive pixels
|
||||
#define HEIGHT 8
|
||||
#define NUMPIXELS 64 // 8x8 Matrix
|
||||
*/
|
||||
#define NUMPIXELS 64 // 8x8 Matrix
|
||||
#define NUMDOTS numPixels() //dots equals num pixels
|
||||
|
||||
|
||||
//3x6 LED Box
|
||||
/*
|
||||
#define HOSTNAME "ledbox"
|
||||
#define NODENAME "pixel"
|
||||
#define LEDBOX3X6
|
||||
#define WIDTH 3
|
||||
#define HEIGHT 6
|
||||
#define NUMPIXELS 18 // 3x6 LED Box
|
||||
#define NUMPIXELS 36 // 3x6 LED Box, 2pixels per box
|
||||
#define NUMDOTS 18
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
|
@ -25,7 +25,7 @@ void StripComplete() {
|
|||
return;
|
||||
}
|
||||
|
||||
HomieNode homieNode("pixel", "commands");
|
||||
HomieNode homieNode(NODENAME, "commands");
|
||||
|
||||
|
||||
bool onSetColor(const HomieRange& range, const String& value) {
|
||||
|
@ -191,7 +191,7 @@ void loopHandler() {
|
|||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
Homie_setFirmware("pixelprojektor", "1.0.0");
|
||||
Homie_setFirmware(HOSTNAME, "1.0.0");
|
||||
Homie.setLoopFunction(loopHandler);
|
||||
|
||||
homieNode.advertiseRange("pixel", 0, NUMPIXELS - 1).settable(onSetPixel);
|
||||
|
@ -208,13 +208,14 @@ void setup() {
|
|||
strip.begin();
|
||||
strip.clear();
|
||||
// strip.setBrightness(64);
|
||||
// strip.setBrightness(255); // HEEELLLLLLL :)
|
||||
strip.setBrightness(10); // DEBUG!
|
||||
strip.setBrightness(255); // HEEELLLLLLL :)
|
||||
//strip.setBrightness(10); // DEBUG!
|
||||
strip.show();
|
||||
stopAfterCompletion = false; // Default
|
||||
// strip.Plasma(); // Default effect
|
||||
//strip.Plasma(); // Default effect
|
||||
strip.RainbowCycle(50);
|
||||
|
||||
ArduinoOTA.setHostname("pixelprojektor");
|
||||
ArduinoOTA.setHostname(HOSTNAME);
|
||||
ArduinoOTA.onStart([]() {
|
||||
strip.clear();
|
||||
strip.setBrightness(64);
|
||||
|
|
Loading…
Reference in New Issue