Skip to content

Commit

Permalink
[noise] Fixed noise effects for big matrix and slow chips
Browse files Browse the repository at this point in the history
Closes #11
  • Loading branch information
CODeRUS committed Mar 17, 2020
1 parent 29b8e95 commit 3ad252b
Showing 1 changed file with 26 additions and 12 deletions.
38 changes: 26 additions & 12 deletions src/effects/noise/NoiseEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,10 @@ NoiseEffect::NoiseEffect()
void NoiseEffect::activate()
{
maxDimension = max(mySettings->matrixSettings.width, mySettings->matrixSettings.height);
if (mySettings->matrixSettings.width > mySettings->matrixSettings.height) {
noise = new uint8_t*[mySettings->matrixSettings.width]();
for (uint8_t i = 0; i < mySettings->matrixSettings.width; ++i) {
noise[i] = new uint8_t[mySettings->matrixSettings.height];
}
} else {
noise = new uint8_t*[mySettings->matrixSettings.height]();
for (uint8_t i = 0; i < mySettings->matrixSettings.height; ++i) {
noise[i] = new uint8_t[mySettings->matrixSettings.width];
}
noise = new uint8_t*[maxDimension]();
for (uint8_t i = 0; i < maxDimension; ++i) {
noise[i] = new uint8_t[maxDimension];
}

colorLoop = 0;
}

Expand All @@ -39,9 +31,17 @@ void NoiseEffect::fillNoise8()
{
for (uint8_t i = 0; i < maxDimension; i++) {
const uint16_t ioffset = settings.scale * i;
if (i % 3 == 0) {
#if defined(ESP8266)
ESP.wdtFeed();
#else
yield();
#endif
}
for (uint8_t j = 0; j < maxDimension; j++) {
const uint16_t joffset = settings.scale * j;
noise[i][j] = inoise8(x + ioffset, y + joffset, z);
const uint8_t val = inoise8(x + ioffset, y + joffset, z);
noise[i][j] = val;
}
}
z += settings.speed;
Expand All @@ -55,6 +55,13 @@ void NoiseEffect::fillNoiseLED()
}
for (uint8_t i = 0; i < maxDimension; i++) {
uint16_t ioffset = settings.scale * i;
if (i % 3 == 0) {
#if defined(ESP8266)
ESP.wdtFeed();
#else
yield();
#endif
}
for (uint8_t j = 0; j < maxDimension; j++) {
uint16_t joffset = settings.scale * j;

Expand All @@ -79,6 +86,13 @@ void NoiseEffect::fillNoiseLED()
y -= settings.speed / 16;

for (uint8_t i = 0; i < mySettings->matrixSettings.width; i++) {
if (i % 3 == 0) {
#if defined(ESP8266)
ESP.wdtFeed();
#else
yield();
#endif
}
for (uint8_t j = 0; j < mySettings->matrixSettings.height; j++) {
uint8_t index = noise[j][i];
uint8_t bri = noise[i][j];
Expand Down

0 comments on commit 3ad252b

Please sign in to comment.