Homemade arduboy based on Itsybitsy (formerly Leonardo)

Hey everyone, I was in at the tail end of the $12 arduboy clone thread, but never got the ball quite rolling on mine.

I already proofed it out using a breadboard, oled, and buttons (to ensure I had the proper wiring), but now Im trying to move onto consolidating everything into something more functional.

At the moment, I have two double sided perfboards attached to each side of the Arduino on their respective pin headers (for the buttons), and I have enough space to place the buttons, but between the wiring involved and the soldering, im a little unsure where to go from here. I still have access to the icsp headers, for the oled, but i would like to attach one more perfboard to set the oled in. Does anyone have any suggestions what I should do from here, or can anyone point me to more appropriate resources what I should do? Thanks!

1 Like

That looks really fragile … I hope you are not a rough player. I wonder if you would be better of with a prototyping shield like this one > https://www.adafruit.com/product/2077

I imagine you can get them really cheap from China.

Here is the schematic … wire away!

2 Likes

I’m not very good with hardware, but I recommend drawing your ideas on paper first. If you know what your limitations are (because part X has to connect to part Y) then it becomes easier to get a feel for what you can and can’t do.

Thanks, I found one of those proto boards for really cheap (which was pictured as exactly the same as the one linked, so hopefully it is), just may take a while to show up in the mail. But this seems pretty comparable to the production schematic, and the Leonardo based shield print that was posted in the original $12 arduboy thread, so hopefully planning around that should make it a bit easier

Depending on where you are located parts from China an arrive surprisingly quick. I look forward to seeing how this progresses …

1 Like

Still eagerly awaiting the parts in the mail (the shield and a replacement Leonardo, minus bent male header pins/with a clean set of female headers), but both should arrive within the week.

Meanwhile, I have this other one to prototype with- is there a way I might be able to use a joystick instead of directional buttons? I don’t know anything about joysticks (yet), but would this involve the use of potentiometers?

Just an idea, but could be a good learning experience/ could spare space on the proto shield. Thanks!

Most of the cheap joysticks Like that below use potentiometers. This shouldn’t be a problem if your analog pins are exposed.

j1

The more expensive ones like that below have four (or eight) little microswitches.

j2

2 Likes

Ah, the one I’ve already got is the same kind as the first. Is there any information out there how I might go about that? Don’t want to take up too much of your resources asking how to do it if there’s information elsewhere. Thanks!

1 Like

I am also interested in making one with a PSP analog stick…

There’s an article on the Arduino site:

https://www.arduino.cc/en/Tutorial/JoyStick

Oh alright, I wasn’t sure if just the joystick tutorial would be enough, so I go ahead and do that and probably come back with another question or two haha. Thanks!

You may have to play with analogue pin numbers but it should get you started.

Oh that’s pretty cool - especially if you are trying to create a slim-line clone.

1 Like

The easiest way is to use a 5 way tactile switch and put a thumb cap on it.

The biggest difference between a dpad and a joystick (if you haven’t guessed already) is that buttons on a dpad are a simple on-off situation (digital) while joysticks can detect how far they’ve moved (analogue).

That’s why joysticks tend to be preferred for gamepads on modern games, the movement can be converted into a floating point value between 0 and 1 which can then be multiplied with a movement vector to affect it’s strength, giving the player better control over their character’s movement (or a cursor, or whatever it is they’re controlling).

Technically controllers have thumb sticks
Old pc and Atari type gaming used joysticks
Arcade cabinets use joysticks
Most joysticks (I say most because there’s also optical and rotary) use micro switches the main difference between an 8 way and 4 way is the gate only allows one direction to be pushed at a time removing diagonals.

Dpads can also come in analog or digital flavours.

Oh alright, that makes much more sense from the data side (the floating point value) Thanks! I was just looking at it from the hardware side. Its my understanding that this is done through the axes being potentiometers themselves. Im just not sure what library Id need to make these work (or how to program them myself) to base the wiring off of. Ive found a few around the internet but am getting around to figuring one or two out now. Im also not sure how to work this into my overall program yet, but id imagine once I have this defined I can figure that out based on what and where the buttons are respectively. I see how the tactile switch in the stick (pushing down on it) is a digital connection since its a push button, then the axes are analog, just not sure what will be where or what ill be utilizing in particular yet. Thanks!

2 Likes

Okay, now Ive gotten the joystick connected and the code successfully uploaded. The serial window prints an output that changes accordingly with the left, right, up, and down movements, and stays consistently the same in the middle (though im unsure what these numbers ‘should’ be). Though in the tutorial you sent me i found this:

“The following code includes a method called treatValue() that is transforming the sensor’s messurement into a value between 0 and 9 and sends it in ASCII back to the computer. This allows to easily send the information into e.g. Flash and parse it inside your own code.”

So should i set this up earlier on in the code, then go back and reference these values in place of the button presses? Thanks!

I wouldn’t worry about any of that. The code:

int value1 = analogRead(joyPin1);

Stores the value between 0 and 1023 into the value1 field. You have probably noticed that when you do not push the stick in any direction, the following code:

digitalWrite(ledPin, HIGH);          
delay(value1);
digitalWrite(ledPin, LOW);
delay(value2);

probably prints values around but not exactly 512.

I would look at writing code that does something like:

switch (value1) { // assume value1 is X axis

  case 0 ... 240:
     moveplayerFastToLeft();
     break;

  case 241 ... 480:
     movePlayerSlowlyToLeft();
     break;

  case 481 .. 540: // dpo nothing as this is noise.
     break;

  case 541 .. 760:
    movePlayerSlowlyToRight();
    break;

  case 761 .. 1024:
    movePlayerFastToRight();
    break;

}

I am not sure what your application looks like but you get the idea. You could be more granular with the increments if you want 3 or more different speeds.

3 Likes