The Technocolour Dreamcoat, phone-free Burning Man 2023 edition!

Thanks to @wizard’s amazing work over the weekend, I’ve implemented next/previous hardware buttons and a brightness knob. I can now venture out onto the playa phone-free! Come say hello if you see me.

8 Likes

This is great – I was following your ask in the other thread, but didn’t quite “get” what you were implementing and how it was going to work – are you game to contribute back to the forum more hardware build details and the code block you wrote for the beta software?

Well, sure. Here’s the code:

export function beforeRender(delta) {
  // ...

  // enable next/forward buttons
  debounceNext(delta)
  debouncePrev(delta)
}

export var analogInputs

var DEBOUNCE_TIME = 40;

var nextBtnState;
var nextBtnTimer;

function debounceNext(delta) {
  var newState = analogInputs[2] > 0.5;
  if (newState == nextBtnState) {
    nextBtnTimer = 0;
  } else {
    nextBtnTimer += delta;
  }
  if (nextBtnTimer > DEBOUNCE_TIME) {
    nextBtnState = newState;
    if (nextBtnState) {
      sequencerNext();
    }
  }
}

var prevBtnState;
var prevBtnTimer;

function debouncePrev(delta) {
  var newState = analogInputs[1] > 0.5;
  if (newState == prevBtnState) {
    prevBtnTimer = 0;
  } else {
    prevBtnTimer += delta;
  }
  if (prevBtnTimer > DEBOUNCE_TIME) {
    prevBtnState = newState;
    if (prevBtnState) {
      sequencerPrev();
    }
  }
}

export function sequencerPrev() {
  var p = playlistGetPosition() - 1;
  p = mod(p, playlistGetLength());
  playlistSetPosition(p);
}

(But note in the other thread I could clean up this duplication a bit by putting the state/timer/action variables in arrays.)

This is what the control box hardware looks like:



I’ve basically got a little board with the buttons mounted on it, plugged in to the analogue inputs of the sensor expansion board with a bodged-up connector made out of a right-angle header socket. The board has resistors that pull the button outputs down to ground (er, not in that picture though, that’s pre-fixing them to pull the correct pins down.) The pot is connected to another analogue input.

I read the button state and call the prev/next functions as per the code above and I’ve had to modify every pattern to multiply the brightness by analogInputs[0] (to which the pot’s wiper is connected.) Either rgb(r * analogInputs[0], g * analogInputs[0], b * analogInputs[0]); or hsv(h, s, v * analogInputs[0]).

And that’s about it! I’m planning on doing a bigger post on my blog about the build, but that’s going to have to wait until I’m back from the Burn :).

2 Likes

This is so cool! I’d love to see a bigger post about this!

What kind of LEDs are you using? Love that they show up the way they do!

Here’s a sneak peek, but as I said I’m going to put up a more detailed blog post when I get back:

2 Likes

Thanks a ton @ratkins – I’d LOVE to read a full build breakdown post Burn; this is a really cool approach.

Heck, I posted in Hey 2023 Burner ms, what are you bringing to the Playa this year? - #12 by ZacharyRD my Playa wearable for the year, and ran out of time for a full writeup of implementation details myself – but doing exactly what you have here for pattern and brightness control was one of my stretch goals that very much didn’t happen. I was trying to just use the main PB onboard button pins to change patterns, and I was getting some weird issues (it didn’t debounce properly, that caused me to cut that out of the project in the interest of time.

After Burning Man / once the code you’re running on is not Beta / once you do a full write up, I’d love to enhance that helmet to do exactly what you’ve done here; it already has a sensor expansion board.

Note that I probably wouldn’t have used the analogue pins on the sensor board for buttons if it hadn’t been mechanically convenient, there are disadvantages. You can’t set INPUT_PULLUP on the sensor board’s pins, for example.

1 Like

Nice, I’m using those same pebbles for a last minute “add LEDs to a fur coat”, but no luxury of taking the whole liner out, had to hand stitch in some elastic loops and hoping that when I connect it all tonight it works.

I wasn’t gonna go this year, but so many tickets available, I couldn’t help myself. Will miss the meet up, but hope to see some of you out and about!

4 Likes

Wait, where’s the meetup?

Thursday 9-11pm, Illuminaughty at 8:00 and G I think.

I haven’t seen details about that one – @hex337 if you have more please share. There’s also this: Burning Man LEDs are Awesome meetup

The LEDs are Awesome meetup for folks not on FB:

TUESDAY, AUGUST 29, 2023 AT 7 PM – 10 PM
Camp Illuminaughty, 9:15&G, Black Rock City
Come together to share your projects, ideas, and skill with other LED enthusiasts. Continues with a DJ party starting at 9 pm

They specifically carved out a few hours so LED folks can get together and nerd out about stuff, then follow with a party.

2 Likes

It’s also unfortunately during the Art Haus Ballet performance https://www.arthausonplaya.com/ which should be amazing and I have a friend playing in, or I’d be there myself.