1111
1212#if FT_MOONLIGHT
1313
14- // alphabetically from here
14+ // alphabetically from here, MHs at the end
1515
1616class HumanSizedCubeLayout : public Node {
1717 public:
@@ -151,4 +151,113 @@ class RingsLayout: public Node {
151151 }
152152};
153153
154+ class MHWowi24Layout : public Node {
155+ public:
156+
157+ static const char * name () {return " MHWowi24 🚥" ;}
158+ static uint8_t dim () {return _2D;}
159+ static const char * tags () {return " " ;}
160+
161+ uint8_t width = 4 ;
162+ uint8_t pin = 16 ;
163+
164+ void setup () override {
165+ hasLayout = true ;
166+ Node::setup ();
167+
168+ addControl (width, " width" , " range" , 1 , 32 );
169+ addControl (pin, " pin" , " pin" , 1 , 48 );
170+
171+ }
172+
173+ void addLayout () override {
174+ layerV->layerP ->lights .header .channelsPerLight = 24 ;
175+ layerV->layerP ->lights .header .offsetPan = 0 ;
176+ layerV->layerP ->lights .header .offsetTilt = 1 ;
177+ layerV->layerP ->lights .header .offsetBrightness = 3 ;
178+ layerV->layerP ->lights .header .offsetRGB = 4 ;
179+ layerV->layerP ->lights .header .offsetRGB1 = 8 ;
180+ layerV->layerP ->lights .header .offsetRGB2 = 12 ;
181+ layerV->layerP ->lights .header .offsetZoom = 17 ;
182+
183+ for (uint8_t x = 0 ; x<width; x++) {
184+ addLight ({x, 0 , 0 });
185+ }
186+ addPin (pin); // needed to slow down the dmx stream ... wip
187+ }
188+ };
189+
190+ class MHTroy15Layout : public Node {
191+ public:
192+
193+ static const char * name () {return " MHTroy15 🚥" ;}
194+ static uint8_t dim () {return _2D;}
195+ static const char * tags () {return " " ;}
196+
197+ uint8_t width = 2 ;
198+ uint8_t pin = 16 ;
199+
200+ void setup () override {
201+ hasLayout = true ;
202+ Node::setup ();
203+
204+ addControl (width, " width" , " range" , 1 , 32 );
205+ addControl (pin, " pin" , " pin" , 1 , 48 );
206+
207+ hasLayout = true ; // so the system knows to rebuild the mapping if needed
208+ Node::setup ();
209+ layerV->layerP ->lights .header .channelsPerLight = 15 ; // set channels per light to 15 (RGB + Pan + Tilt + Zoom + Brightness)
210+ layerV->layerP ->lights .header .offsetRGB = 10 ; // set offset for RGB lights in DMX map
211+ layerV->layerP ->lights .header .offsetPan = 0 ;
212+ layerV->layerP ->lights .header .offsetTilt = 1 ;
213+ layerV->layerP ->lights .header .offsetZoom = 7 ;
214+ layerV->layerP ->lights .header .offsetBrightness = 8 ; // set offset for brightness
215+ layerV->layerP ->lights .header .offsetGobo = 5 ; // set offset for color wheel in DMX map
216+ layerV->layerP ->lights .header .offsetBrightness2 = 3 ; // set offset for color wheel brightness in DMX map
217+ }
218+
219+ void addLayout () override {
220+ for (uint8_t x = 0 ; x<width; x++) {
221+ addLight ({x, 0 , 0 });
222+ }
223+ addPin (pin); // needed to slow down the dmx stream ... wip
224+ }
225+ };
226+
227+ class MHTroy32Layout : public Node {
228+ public:
229+
230+ static const char * name () {return " MHTroy32 🚥" ;}
231+ static uint8_t dim () {return _2D;}
232+ static const char * tags () {return " " ;}
233+
234+ uint8_t width = 2 ;
235+ uint8_t pin = 16 ;
236+
237+ void setup () override {
238+ hasLayout = true ;
239+ Node::setup ();
240+
241+ addControl (width, " width" , " range" , 1 , 32 );
242+ addControl (pin, " pin" , " pin" , 1 , 48 );
243+
244+ layerV->layerP ->lights .header .channelsPerLight = 32 ;
245+ layerV->layerP ->lights .header .offsetRGB = 9 ;
246+ layerV->layerP ->lights .header .offsetRGB1 = 13 ;
247+ layerV->layerP ->lights .header .offsetRGB2 = 17 ;
248+ layerV->layerP ->lights .header .offsetRGB3 = 24 ;
249+ layerV->layerP ->lights .header .offsetPan = 0 ;
250+ layerV->layerP ->lights .header .offsetTilt = 2 ;
251+ layerV->layerP ->lights .header .offsetZoom = 5 ;
252+ layerV->layerP ->lights .header .offsetBrightness = 6 ;
253+ }
254+
255+ void addLayout () override {
256+ for (uint8_t x = 0 ; x<width; x++) {
257+ addLight ({x, 0 , 0 });
258+ }
259+ addPin (pin); // needed to slow down the dmx stream ... wip
260+ }
261+ };
262+
154263#endif // FT_MOONLIGHT
0 commit comments