From 3e131014b2dd4610554fbeef459a1eab59862965 Mon Sep 17 00:00:00 2001 From: Brandon502 <105077712+Brandon502@users.noreply.github.com> Date: Tue, 20 Feb 2024 17:26:36 -0500 Subject: [PATCH] Added PinWheel Expand1D Effect --- wled00/FX.h | 3 ++- wled00/FX_fcn.cpp | 24 ++++++++++++++++++++++++ wled00/data/index.js | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/wled00/FX.h b/wled00/FX.h index 2a357e95..8df52855 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -354,7 +354,8 @@ typedef enum mapping1D2D { M12_pCorner = 3, M12_jMap = 4, //WLEDMM jMap M12_sCircle = 5, //WLEDMM Circle - M12_sBlock = 6 //WLEDMM Block + M12_sBlock = 6, //WLEDMM Block + M12_sPinWheel = 7 //WLEDMM PinWheel } mapping1D2D_t; // segment, 72 bytes diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 4a25670e..814dd3fb 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -805,6 +805,9 @@ uint16_t Segment::virtualLength() const { else vLen = max(vW,vH) * 0.5; // get the longest dimension break; + case M12_sPinWheel: //WLEDMM + vLen = 360; // full circle + break; } return vLen; } @@ -932,6 +935,27 @@ void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDMM: IRAM_ATT } } break; + case M12_sPinWheel: { + // i = 0 through 359 + int centerX = vW / 2; + int centerY = vH / 2; + // int maxDistance = sqrt(centerX * centerX + centerY * centerY) + 1; + + int distance = 1; + float cosVal = cos(i * DEG_TO_RAD); // i = current angle + float sinVal = sin(i * DEG_TO_RAD); + while (true) { + int x = centerX + distance * cosVal; + int y = centerY + distance * sinVal; + // Check bounds + if (x < 0 || x >= vW || y < 0 || y >= vH) { + break; + } + setPixelColorXY(x, y, col); + distance++; + } + break; + } } return; } else if (Segment::maxHeight!=1 && (width()==1 || height()==1)) { diff --git a/wled00/data/index.js b/wled00/data/index.js index 2e47f504..783424ff 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -779,6 +779,7 @@ function populateSegments(s) ``+ ``+ ``+ + ``+ ``+ ``; let sndSim = `
Sound sim
`+