 Welcome to the show, it's me, JP, and I'm making all kinds of noise over here. Sorry about the hot mic before the show, but now I think we're listening to the things we intend to. So welcome. First of all, I wanna say thanks for stopping by over in the chats. We've got people over in our Discord chat as well as our YouTube chat. And if you're somewhere else, and you're wondering where is everybody, come on over. This is the Adafruit Discord at adafruit.it slash discord, join it, and then head over to the, there it is, live broadcast chat channel inside of our server. And you'll find people hanging out and chatting there during the show. And there's also, as you can see here, a whole host of other channels that you can visit any time of the day, ask questions, answer people's questions, chat about stuff. That's the place to do it. Hello, Dave Odessa, Beata Grafdahl Hagen, Ruben Aspero, Rich Sidowski, Wet Willy over in our YouTube chat, nice username. And you can see all the people over here in our Discord chat as well. So let's see, I was off at the end of last week, beginning of this week, so I did not have a new product show on Tuesday. So I won't be showing a clip from that. But I will be back next Tuesday with a new product show. But I do have a CircuitPython Parsec for you today. I've got a coupon code, in case you want to go buy some good stuff over at Adafruit.com. I will give you a 10% off coupon. In fact, I'm talking about it right now, I'll give it to you right now. This is playtime. Just type in playtime at the coupon code PROMPT on your way out. And you can get 10% off on your entire order of things. It won't work on gift certificates or subscriptions or software, but it will work on stuff, physical stuff. So go load up your cart with good Adafruit-y things and get some on a discount. I gotta share this gift that just showed up over in the Discord. He's got a little boopy nose joystick. It's the third joystick on the Xbox controller. Thanks for that. Get any SKU-7, I appreciate your gifts. Let's see what else is happening. Well, we are gonna be talking about joysticks or controllers today, so that's a good, that's a nice on-topic gift, I appreciate that. I know there are no accidents, everything is well-considered. And what else do we have going on? I think that's the thrust of it. Last week, I showed the beginnings of the computer perfection project and I've been working with Jephler, who's been writing some updates to the Synth.io library in CircuitPython, which I didn't know about this library. It's a library that has some abilities to play MIDI files. You can give it a .mid file and it'll play the notes with a simple synthesizer. And Jephler has been updating it to be less simple. He's now got, I think, 12-voice polyphony or polyphony going and some wavetable types of things going on where you can shift between wavetables, different waveforms. So that could be a really exciting synth engine for all kinds of things and I've been working on putting that inside of the computer perfection toy. I will get back to that. That's gonna take a little longer than the typical one week boom and we've got a guide kind of project. But I do have a new project this week, which is based on these beauties over here. So we'll be jumping on those cuties in a moment. But before I do that, let's see how about we jump right into a CircuitPython Parsec. So let me prep for that and here we go. The CircuitPython. All right. Here we are. For the CircuitPython Parsec today, I wanted to show you how to use an integer divide. So when we take numbers in CircuitPython and we divide them, we can just use the regular slash sign to divide them as a float and that means we can get sort of decimal numbers in the result. But there are a lot of cases where we want an integer, for example, to light up a particular number of neopixels. You'll want an even whole number. You can't use a float or a decimal for that. Or for positioning stuff on a screen, such as the example that I have here, what you can see is as I turn this knob, I have it plugged into a little pie portal pint, I'm displaying both the raw analog read, that's that big number, like 18,000 something. And then you can see I'm dividing it by 256 to get some sort of nice usable number range for typical things. And you can see the answer there is 71.5156. Well, I can't move that many asterisks. That's not a whole number. I need an integer number. So the number I'm actually using for how many asterisks I'm drawing on screen is the one below it, which is that number and then two slashes, which then divides by 256 but gives me an integer number as the result. So 57, 60, 70, 80, and so on as I turn this. You can see in my code how this works when I am checking this position, which is an analog read, position is equal to the knob value, which I then am doing a little check on. This is sort of a filtering I'm doing here. I'm using this, get a whole number thing because the little decimal values are bouncing all over the place all the time. And then I'm printing either the divide by, which gives us the float or the integer divide, the two slashes, and that gives us the integer whole number. And then I am printing a number of asterisks multiplied by the position. And again, two slashes divided by in an integer fashion 256. And that gives us usable numbers in a really nice, easy to use syntax. And that is how you can use integer divide inside of circuit Python. And that is your circuit Python parsec. All right. We had a question in the chat. I saw Rich Sad said, is the coupon code only for the duration of the show? Coupon code for this show is good until midnight tonight, east coast time. So do your global time math if you have to find out what time that's gonna be. But that is good until essentially midnight tonight on the east coast time. So you've got some time. Do not panic. In the circuit Python, sorry, in the product pick of the week show, too many acronyms in my head. In the product pick of the week show, that discount is only good during the show. There is no coupon code for that. That's just the price gets changed during the show and then changed back after the show. But this one right here, if you want to use the play time coupon code over in the Adafruit store, then this will be good until midnight. And to clarify, because Todd was really confused, he said, which east coast? That's right. I'm so United States of America centric, but east coast of the United States of America time. What do we call that? Eastern time, Eastern Standard Time, Eastern Daylight Savings Time. One of those. I never know which one it is. Yes, so not the east coast of Wagadugu. So, let me know if you have any thoughts or suggestions on upcoming circuit pythons. You can let me know, circuit python parsec so you can let me know in the chat or you can message anytime. And we will take a look at your ideas for things to show, things that you find helpful and useful. Often I take these from things that I find useful in the code I'm working on for projects. I'll go, hey, this is a neat thing. This is useful and turns into a circuit python parsec. All right, let's see. What else have we got going on here? Let's talk about, well, I like that idea. Pete Curry in a hurry says global time math. That sounds like a EuroRack module. It kind of does. Let's talk about these controllers. So first, let me give you a little history. The message came to me from Phil Turon, PT. He said, hey, take a look at this tweet from Robert Dale Smith. And here you can see it's gonna, the frame rate won't be great on my browser here, but you can see he's got a Nintendo Switch with this Fisher Price Game Controller plugged in and he's playing, I don't know what that is. It looks like Prince of Persia or Karateca or something like that. So he's playing one of the retro games on the Switch using this controller. It looks like two buttons and a D-pad that are being used. And Phil said, hey, go get some of these controllers and build some of these. We want one for sure and we wanna find out more and maybe see if we can get a guide put together or share some of the info out here. So first of all, check out Robert Dale Smith. That's his Twitter handle. And if you follow his links, you'll see Robert runs this site, controlleradapter.com, which creates a bunch of different adapters that allow you to take a controller, like a 3DO controller and plug it into an SNES or vice versa. So he's got all these adapters that are useful for different game controllers on different game systems and some other stuff. He also does giveaways. So these, even though they show like they're in the store, these are actually giveaways that he just uses as a store to keep track of. It looks like he gave away that Fisher Price Controller. And so I followed his links too and reached out to Robert and he shared this GitHub. If you go to github.com slash Robert Dale Smith, you'll find there this GP2040CE fork. So this is from the OpenStick community, which is a group of people who work on game controllers and making game controllers work in different scenarios. They have a project called GP2040CE. That uses a Pico with the Raspberry Pi RP2040 chip to allow you to build custom controllers which can talk over USB. Now, when you are talking about USB game controllers, there are a number of different modes and they have a lot of particularities about the type of game messages that they're sending over USB, including the switch has some particularities, there's a direct input, which works on a lot of older systems, including PS3. And then there's a, I forget the name of it, I'll check my notes here, there's the X input, which is kind of the most modern windows type of input. So what Robert did was create a project where this KB2040, one of our beloved little boards here that has the RP2040 on it and is set up for keyboard types of stuff. This, he has ported the project to run on the KB2040, has a default configuration that you can follow for the pinout. It reads button presses and then it allows you to configure those as whatever you want over on the USB receiving end. So I followed those instructions and have built one of these. What I wanted to do is take you through it a little bit. So let's jump over to this view of the world and let me do a little focus fix here. There we go. So first of all, let's talk about this controller. Where did my boxed one go? Here it is. So this right here is our game controller. You can find these on Amazon anywhere from about $6 to about $15 depending on the seller. But Amazon themselves sells it for about $6. You probably find these in toy stores. I'm guessing retail price of around $15, $12 or $15. So really inexpensive, but they're very high quality. They're made for ages six to 36 months. So that means they're durable. No parts are gonna break off that you can choke on. They will handle a beating. They're probably fairly stain resistant, stain proof. And out of the box, you'll see it says, okay, press buttons. Let me change my shutter on here a little bit so you can, oh, that one doesn't wanna change. All right, we'll leave it alone. You can see there's a RGB LED in there. I'm gonna shade it a bit. So that's different colors. There's one RGB LED in there, different colors. You can press these four buttons. You can press this sort of joystick button. It's only one switch in there. It's not directional. It's definitely not analog. Plays a song, plays a bunch of different songs each time you press it. Level one, level three, level four, level two. You can also switch. So that's like a learning mode where you press the number and then it does a number of zap sounds. One zap, three zaps. Has these up here that are just tactile fidget. That's not connected to anything switch-wise, electronics-wise. Same with this little dial here. This switches between two modes of what the sounds are gonna be. And then there's a switch on the back. So I have one out of the package. Switch on the back here that has three positions. This is off, off medium volume and high volume. And a couple of other interesting things. I noticed here it says player tip. Up, up, down, down, dot, dot, dot. Cheat code unlock fun surprises. Cheat codes unlock fun surprises. If you know them, try them. So of course we gotta try the Konami code. So I think that's up, down, up, down, left, right. No, wait, I've got it wrong. Is it up, up, down, down, left, right, left, right button, button. No, I've got it wrong. Up, down, up, down, left, left, right, right. All right, I have to look it up. I just killed all my cred. What's the Konami code? Everyone in the chat is probably dying. Hold on one second. Konami code. Oh, that's so embarrassing. Up, up, down, down, left, right, left, right, B, A, and start. Okay, I think this will work up, up, down, down, left, right, left, right, B, A. So that's the cheat code surprise you get there. That boop, boop, boop, you win. Let me try it again and see if we can do it faster. Yeah, so I guess that might be the only one. There's probably a different one in this mode, let's see. Okay, that's what it always says. So if there are other ones, you might want to try them. If you got any that you think I definitely should try, let me know. Let's forget about that embarrassing moment where I got it all wrong. The battery cover comes off here and we have a, sorry, I was going to check the chat because I think people are probably chiming in with, it's because I'm older than 36 months, someone said. Yeah, it's the babies that know the cheat codes. Let me just check my Discord chat here. Any others? Okay, let me know if you know others. So we can take off the battery cover here. This takes three double A's. We pull those out. And we're going to end up powering this over USB. So we actually don't need the batteries, which also means we have a lot of spare room in here. In Robert's version of this, what he did is he cut out a little hole for the USB connection on the KB2040. So that'll live right about there. And then he made a couple of little holes for the two buttons on here. And he also removed the STEMAQT port just to have some extra room. I'll show you what I did on mine. I hacked one of mine up a heck of a lot more than that just to kind of get things to fit and see where things were, to keep the STEMAQT port on there. So let's open this up. And what I found is there is some hot glue that was used or some kind of glue that was used to just keep the battery box wires neat. And that glue ends up, when they assemble this, it ends up sort of sticking to the back of the PCB. I don't think they were actually trying to glue it shut. I think it was just a coincidence on one of the Fisher Price toys that's similar that I opened. They put some tape over that glue first so it wouldn't stick. But these are really amazingly easy to get into which is super nice. There's no plastic snap tabs or anything like that to worry about. You don't have to get a guitar pick in there to open it from what I found. Just gotta get these screws out. That one's biting on and staying there. And, oh, that's nice. I see there's some job talk going on over in the chat there. This is another one of these that I really like how they've changed the way they connect these to the cardboard. There's a pair of little discs that slot into these key holes and turn that keeps it on there instead of wire wraps, no zip ties either. So you can see once you get all of these or just actually these two, the ones that matter, these screws off, there's a little liftoff cover there and that just looks mostly. It kind of pinches this in here but also means we get something and a nice receptacle for the screw there. This one, that screw's just determined not to come out. It doesn't really matter. There we go. So now if we pull this open, what I recommend is face down and then pull this up and just be careful because the battery box wires are connected there but in this orientation you won't lose any of these plastic fidget parts. So let's see. Yeah, so there's a little sticking going on there and that is some of this goo, this adhesive goo just sort of stuck to some wires but there you can see that's with it open. Kind of just flip that off to the side. So really friendly, hacker friendly, modification friendly things they did. These battery box wires are on a little JST style connector with a little locking tab so you can just squeeze that and that comes off to the side. Same with this switch. So that's the switch or button that gets pressed by this sort of joystick here. That one, for one reason or another was very hard to unclip on the other one that I did. And same with this one yet. It really wants to get, let me see if I can use a small screwdriver. It's meant to just be a press clip but for some reason it doesn't flex enough and it gets caught. You don't actually need to remove this one for any particular reason but I just want to get the, there we go, the whole PCB out. Yeah, so that one's on like a very, for some reason it looks the same stuff but it's a very bitey plastic. And then the speaker also, and this one comes off very easily but at least it did on the other one. So there's the little speaker there. You can see Fisher Price does this on a lot of the toys of theirs that I've opened up. They've got a little sound board that is pressing against the back of the speaker to help use some of that plastic for amplification. So they have kind of that little flexy U shape there to give it a lot of pressure against the back of the speaker. And you can see there's a one screw that was part of holding the case in place that held one side of that speaker holder in place and then there's another one right in there. These just simply lift off so you can take these on and off. You can see that just has a little snapping clip there. And also this one can just be taken off like so. The front switch that goes between modes, sound modes just as flipping that little two position switch there. And this one is the one that was just straight exposed through the back there that didn't get fancy with it. So there is a single screw holding the PCB in place now. Again, you can see there was one that was coming through with the case screws that was holding it in place there, I believe. That is the only short screw that you'll pull out. So you should be left with seven long screws from the case and that one short screw for the PCB. And now if we pull this out, you'll see just like any game controller, you've got the plastic injection molded buttons, D-pad pivots on a little stem. So just like any D-pad, there's a central part that's pressed up against the circuit board right here and then that can rock in the four directions. And I think it's a decent, I've used worse D-pads. It's not gonna break any records for speed runs using this controller, but it's actually pretty playable. So you can see here, there are four D-pad elastomer with carbon pills underneath them and the four A, B, C and D buttons as they called them there. This is a nice little, let me zoom up in here. This is a nice little RGB LED here, mounted at a very jaunty angle. I have no idea what necessitated that, you know, they fit stuff where they wanted to fit stuff, but this guy is at this happy little like 12 degree angle for some reason, no idea why. And the peel off, so the elastomer pads have these three little nubs that pull out and you can just take off these. You can't put them in wrong too, because with three, these are keyed, they can only go in one way, which is nice. So there's no confusion there when you go to put that back in. And there you see, we've got our little typical traces that have a common routed sort of around the circuit these outer ones and then the individual button presses and those are all running to the microcontroller underneath this epoxy blob here. I don't think anyone has done a decapping or a de-epoxying or anything like that on mine, so it's a mystery and I'm not gonna do that, it's a mystery what that's running there. I did use, there's another one I'll probably looking at in the future, a different toy from Fisher Price where they didn't blob it, so we can see what the controller is, which is kind of neat. And there are test points for everything. So you can see every single one of these has a nice fat test pad so we can solder to those. What I'm using for this, and actually this is a slight bit of a gear report, I picked up this wire wrap wire rainbow assortment that we have in the Adafruit store because I often use this wire wrap wire as little very thin bodge wire type of wire for these projects and I realized, hey if I get this stuff now I've got, I think it's six colors, one, two, three, four, five, six, seven, eight colors to work with which is nice, it makes things easier to see. So you can trim off some little even lengths of this stuff, you can actually pull some insulation off just with your fingernail. Yoink on that, you don't need to get fancier than that. And then what I did is I tinned all of these and I tinned all of those pads and then you'll just go in there and solder those down. Good thing to do at the beginning when you're doing this is just test it out with a multimeter, see if you can get any continuity. Now what we're gonna end up doing here is I think this will be like so and this is where the KB2040 is so you'll end up wanting enough length to come around from pads and feed up to the different pins on the KB2040 which is what I've done. So in fact, that's as far as I'll go with this one. What I'll do now is a cooking show style let me demo the working one and then take apart the working one. So I'd like to demo it first just in case something terrible happens. But let's see, what I'll do is I'm just gonna bring this laptop into view here, I think. Or you know what, you might be able to see this better. Let me, I'm gonna change a view here to show you my, let me see if you can see this LCD if it's too bright. Second, let's do, yeah, so you can see that one there. So I'll have that playing on this TV. So I've got a VGA cable running through one of these Apple Thunderbolt to VGA thingamajigs over here on this old MacBook Air. And I've got my controller plugged in here and you can see I'm pressing buttons and it's lighting up, but it's not making any sound. And that's because the one thing it did was it drove me crazy having everything powered in there, which is an option you probably get away without. But what I do is I add a little switch that allows me to turn that on or off. So what I'll do, I'll leave it on for now and this is a game of scramble, which is the video game that I got those arcade boards for. So I feel okay playing a ROM of it on MAME. So here's a MAME ROM, let me full screen this. And so what I've done is in the MAME software I've connected up that little star button. You can see that, pressing that star button there. You know what, in fact, let me switch, I don't know, my camera, switcher there. I'll go to a top down view for this. I'll do that one so you can see what I'm pressing. So every time I press that, the, oh, I think I can't full screen that. All right, let's not full screen that. That's disappearing off of the, there you can see credits. Oh no, it's still too big. All right, let's see if I can squash you down. All right, just take my word for it. I've got like six credits on there now. And then I have this as start. And now I'm gonna use the D-pad and A and B. And you can hear, in fact, let me turn up the volume. So you can't even hear the game over that. So I'll flip that switch and turn off sound. So you can see it's working really well. And as it turns out, this project, which is written in using the Pico SDK has incredibly low latency. So this is actually a really fun to play with controller that is honestly better than your average, hey, I've just hooked up a PS3 controller or something like that. So there you can see, there is an action. So that's enough of that. Enough of me getting killed in Scramble. Scramble, by the way, I learned a bit more about it. Scramble has the distinction of being one of the first games to have levels. The notion of not just going and going and going and getting your score up until you're dead but actually having levels, as well as I think the idea of having fuel. So you have to blow up those little fuel cells to keep going or your fuel goes lower and lower and you eventually crash. So let's take this one and now unplug it. So you can see this one, I'll turn the sound back on. So this one has the KB2040 right there. When I plug that in, it's powering microcontroller on there and my KB2040. So we've got the button presses going both to the internal controller, doing its noises as well as all of the USB button presses going out to game pad stuff. So let's take this one apart and I'm sure I'll regret this, but what the heck? I'm gonna separate bin for these screws, mix them up. If you're happy with whatever setting you've got that sound on or off with, you could, by the way, just close this up so you're not dealing with that. Now, one of the things that Robert said he may consider is adding additional sensors in there to do maybe a four-way joystick or an analog joystick with that big blue button. Maybe add switches for these shoulder buttons. So given that we've got the little Stem-a-QT connector on there, you could potentially put in an accelerometer or haptic motor driver and do some little feedback, force feedback stuff if your game supports that. DJ Devin said, hey, since this is such low latency, you could really blow minds if you showed up at a game competition with this silly thing and beat a record, that'd be amazing. Yeah, these little ribbed hand grips on the back remind me of some of the ASCII wear or mad cats like third-party controllers back in sort of the PlayStation era or Xbox era. They'd always have these like ribbed grips on the back there. And it's just kind of like a HDPE plastic, sort of a nice soft-ish feeling, but sturdy plastic has some flex. Yeah, you could add a turbo button and we'll take a look at that project. It has provisions for anything and everything. So LEDs, OLEDs, there's a ton of stuff you can do. Okay, so you can see there my little switch for the speaker on-off. I just have it kind of wedged into a little opening that I artlessly cut out with an X-Acto knife there. Robert's work is much neater than mine. So here you can see I've got this little slide switch which I just grafted into one side of the speaker line. So speaker is always on, but audio is always being sent, but this is just cutting whether it's going to that speaker or not. And then you can see here, I've got my KB2040 and I don't think I'll, yeah, I might as well take it all the way apart. What the heck? Or do I have photos of, I don't think I have photos of where I soldered that in. So yeah, I'll take it all the way apart. Why not? So Robert said he hot glued his KB2040 down. I actually was able to just wedge it in there and it doesn't really want to move at all. You just got to be slightly careful with plugging and unplugging the USB, but it really is kind of nicely smudged in there and not going anywhere, especially because I cut out that hole for these buttons and that connector. So I should be able to just take out this one, screw and pull the PCB. I will, I'm going to leave, if I can, I'm going to leave the speaker connector and this button connector, I think I can and just flip this over. One thing I'll say before I do that, you'll notice that I still have the power cable where is it? This one here, this is the power connector and I just cut those, oh sorry, it's up here. I cut those connections off of the battery box. I actually ended up pulling the metal and spring contacts out of there. So I just am using that same connector. It's just running to three volts and ground on the KB2040. So let's pull that out. Like that. And now you can see I've just got my little rainbow wire, wrap wires running up to all these pads. So there are these four for the ABCD buttons and or button one, button two, button three, button four I think is how they're called in the software. And then on this side, we have the four D-pad connections here, here, here, and here. And then I think this one, yeah, this one right here that I'm pointing at, this is the D-pad one, right next to it where that red wire is going, that is the blue joystick button, that single switch that's in there that gets pressed. So that is me just following Robert's lead on putting that together. He has some nice photos and I think he'll be putting together a guide and some images on the GitHub and maybe more, but that just wraps up to the KB2040 and then there's a particular set of pins that these go to. And so what I like to do at this time is just head over to look at that config. Oh, and the other thing I'll mention actually, let me jump over here, I can turn this light back on now. Yeah, it's running off of three volts and it's seemingly happy with that. I know the batteries we're gonna add up to about what, 3.75, is that right? No, three, four, four and a half, something like that. Seems to run fine off of three, so I'm not messing with it and that's how Robert had it set up. Maybe you could run the thing off the five volt line since we have USB there, you could run it off of that as well. I think you might have to cut the raw jumper on the bottom of the KB2040. It says at that point, is there any connection? The controller's original controller, I thought the wire's bypassed it. Yeah, we're not actually bypassing it, we're actually running the two microcontrollers concurrently, which, so the KB2040 is just touching the test points but nothing's been severed, so that connection to ground or to high, whichever way it's going on the microcontroller inside of the toy is still happy, it's still getting the same commands. So let me jump over to this window right here, and I think, is it in configs here? No, by the way, this is the main info for the main project that Robert forks, this is GP2040.info, and that's all about making gamepad firmware for a host of different systems using RP2040-based microcontrollers. It was geared towards PICOs and a few others, and Robert has forked it to add the KB2040 support, which I appreciate. So let me see, where is that pinout? Oh, you know what, I made a little note of this, so yeah, not that this is super important, but we'll make sure this info's easy to find, but essentially there's just up, down, left, and right, which are on pins 27, 29, 28, and 26, that's GPIO of the chip, so you just have to look at our pinout to see which pins that is on the KB2040, and then three, two, five, and four for the four buttons, and then the joystick switches on 18. So you can go to releases here, and if you click on that, you can download a UF2, so that's all you need is throw that UF2 on there. Search around in here to find the, is it in the docs? I can't remember, sorry, yeah, I can't remember where the pin definitions are, but it is in here somewhere. And stay tuned, because there'll be more info about that coming up, maybe even a learn guide. So let me know if anyone has any other thoughts or questions. Yeah, diagrams would help, today we have the camera. Let me see, I'm just gonna double check. Hold on one second, I have one other place to look. Sure, it's here somewhere. Okay, here's the pinout reference, no? Aha, boardconfig.h, shoulda known it. So there you go, this is kind of interesting. So this is kind of multi-purpose for different boards and different setups. So this is nice, you get a flavor of how fully featured this is, you can set some of these that you're not using just to a negative one for the pin, so it won't use them. So you can see here, we have pin active high, these are the four D-pad pins that we're using that I mentioned there. These are the three, four buttons. I don't think that L2 is actually being used. Shoulder buttons, turbo button, so you could wire something up to be the turbo button. And then there's, if you wanna use LEDs, like turbo LEDs or mode LEDs, you can take a look at some of that commented out code there, turbo, if it's enabled or not, which pin to use for the turbo. I believe this even supports OLEDs and some other display types over I squared C. So you can see here, there's a whole section on OLED displays, and on and on and on. So really cool, I was not aware of this project, this GP2040 project at all before this. So thanks, thanks Robert for pointing this out. Yeah, that blue rocker would be cool for a turbo button. So I think that is gonna do it. So I will say again, playtime, and that came directly off the box here. I saw that on here somewhere. Well, take playtime to the next level. It's kind of bright, but do it, take your playtime to the next level, and get 10% off in the Adafruit store today. Go pick up a KB2040 and maybe one of these, one of these little controllers. I will post over in the Discord the GitHub for this, and that should give you a lot of, if not all of the info you need for now. So there's a link over in the Discord for you. And Davodesa, is this the way you spent your youth? Pretty much, yep. Very first controller I took apart was the Atari 2600 controller, and it just needed, it had a sticky contact. So that was one of my first controller mods as a kid. It was probably around 1983 or something like that. All right, so that's gonna do it. Thanks everyone for joining today for John Park's workshop. I will see you next week again on Tuesday for a product pick of the week and then another John Park's workshop on Thursday. Stay tuned for, I believe we have some deep dive with Tim, potentially tomorrow. Check the broadcast announce page for that and double check the blogs in case anything changes. And then we'll get back to a whole host of shows starting on Tuesday. On Wednesday we'll have 3D Hangouts. We'll have Show and Tell, Ask an Engineer, possibly a Desk of Lady Aida sometime in various hacker times. So we appreciate you hanging out for Aida Fruit Industries. I'm John Park, this has been John Park's workshop. Bye bye.