Programming joysticks

On the new joysticks, there is a mini - milt-direction “d-pad” i guess you could call it. How do you prgram this, or can you even. I can’t find it anywhere in the code

It’s called a “hat switch” and it’ll show up as one of the analog joystick values to the robot controller. I can’t remember if it appears as “Joystick Wheel” or “Joystick AUX” off the top of my head, though.

well, the count of buttons on thejoistick does not equal the count of buttons in the program. and it is the odd man out.

The joystick’s POV hat takes the place of the “pN_wheel”, where N is the number of the joystick port you’re using. I can only really speak for the joystick which I have right in front of me (the other is at my house, being used to play TIE Fighter :)), so YMMV. The two least significant bits of the value change too erratically to be of any use. Here’s a listing of the values of the variable when the POV hat is in different positions:
Neutral: 001011xx
Up Left: 111111xx
Up: 111111xx
Up Right: 111111xx
Left: 011000xx
Right: 110010xx
Down Left: 101001xx
Down: 100101xx
Down Right: 110101xx

The x’s take the place of the two least significant bits, which, as I said earlier, change randomly (at least with this single joystick).

Basically, if you can understand binary, you can take advantage of the POV hat for controlling your robot.

Hope this helps.

I have two basic questions. First, can those old robot interfaces be programed for C or are they strictly the old stuff?

Second, does anyone have an old program with just the two joystick controls? All we want to do is hook up an old interface to a mock control board so we can make sure the trannys work.

(Note: Im the fabricator, the only thing i know about computers is how to break one)
Hopefully i can relay this answer to one of our more knowledgeable people. Thanks

Do you mean the old robot controllers? If so, they can only do the old PBASIC stuff.

our values for the joystick concur for the first 6 bits as well. (darn shame there is basically no difference between UL, U, and UR)

InnovationFirst has “Legacy Documentation” on their website. They have default code, written in PBASIC (for previous years’ control systems), for both single and dual joystick driving. Here’s a link to download those programs. They’re listed under “PBASIC Code”, but you will also need a copy of Parallax’s computer program, in order to program your controller. Links are listed on that same website under “Programming Tools”.

If you need any more assistance, feel free to ask.

So the bit masks are:

const unsigned char Hat_None = 0x2C;
const unsigned char Hat_Up = 0xFC;
const unsigned char Hat_Left = 0x60;
const unsigned char Hat_Right = 0xC0;
const unsigned char Hat_Down = 0x94;

//Unless values are off, Combos aren't OR'ed
const unsigned char Hat_Up_Left = 0xFC;
const unsigned char Hat_Up_Right = 0xFC;
const unsigned char Hat_Down_Left = 0xA4;
const unsigned char Hat_Down_Right = 0xD4;

This seems a little stupid, but that’s life. :frowning:

I have a question, how could I add the right lines of code to make the POV hats work with the new C language this year? Amonst other things, where would I have to define them and map them to the right IO ports to work with the hex/bin input signal?

You also have to good at bit manipulation in C! :slight_smile:

Why not #define them, instead of taking up memory?


if( (p1_wheel & 0xC0) == 0xC0 )
     //hat control is pushed right
else if( (p1_wheel & 0xA4) == 0xA4 )
     //hat control is pushed down-left
et cetera

just use the bitwise AND function (&) to determine if the correct bits are set.

Thanks, that helped a lot. I am just starting out with C so i’m still a little sketchy with it.

no prob. if you want a review on the syntax of C, you could try the various guides in the whitepapers section, or the guide that I’m working on (see the thread in this forum titled “FIRST Programming Tutorial”)

If u can make me a favor, can u teach me how to program the joysticks. I will appreciated. thank u


the inputs from the joysticks are held in a range of variables (actually aliases), set up in ifi_aliases.h:

for instance, the x-axis of joystick one is p1_x

if you want direct joystick-to-pwm control, just use something like the following line:

pwm01 = p1_x;

Just to expanded on what DeltaCoder said, the joysticks are refered to by pX_x and pX_y, where X is the port number the joystick is attched to. For example to access the x and y axises of the port one joystick you would use p1_x and p1_y.

The value that comes in on these pins is between 0 and 255 (an unsigned char). 0 is full to one side, 127 is center, and 255 is full to the other side. For instance, if you have the joystick all the way forward, p1_x would be 255 and p1_y would be 127. If you had it all the way to the right, p1_y would be 127 and p1_y would be 255.

You could also have a combination of the two, of course. For instance, if you where in the forward, right corner, you would get p1_x and p1_y both reading 255.

You can use these values in any way in your program. Just don’t try to change their value in code; it won’t work!

Hope that helps. :slight_smile: Good luck.

I don’t like using #define for constants. Besides, we’ve got memory to kill.

hmm… apparently the forum system managed to place a reply in a different thread… right.