fix things for two leds at same position

This commit is contained in:
interfisch 2018-08-12 20:21:06 +02:00
parent 968507ad7b
commit bcfc1bcd4d
4 changed files with 91 additions and 47 deletions

View File

@ -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
}

View File

@ -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:

View File

@ -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

View File

@ -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);