Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   1 Joystick Control (http://www.chiefdelphi.com/forums/showthread.php?t=62898)

penguain 30-01-2008 20:18

1 Joystick Control
 
The FRC code for 1 joystick control is
Code:

  p1_x = 255 - p1_y;

  p1_y = 255 - pwm05;



  pwm13 = pwm14 = Limit_Mix(2000 + p1_y + p1_x - 127);

  pwm15 = pwm16 = Limit_Mix(2000 + p1_y - p1_x + 127);

how ever when i move the joystick left and right the robot goes forward and backwards

and when in move the joystick up and down the robot moves left and right

should is switch all the axises to the opposite or what

Thanks in advance

Barry Preston
STAG Robotics
Team #1997
Programming and Communications Officer

usbcd36 30-01-2008 20:24

Re: 1 Joystick Control
 
That code assumes that both motors (or sets of motors) move the robot in one direction when they are going forwards. In order to make it work for conventional systems, you need to reverse one of the sides. Simplest way to do that is subtract the value you assign to the PWM outputs from 254:



Code:

  p1_x = 255 - p1_y;

  p1_y = 255 - pwm05;



  pwm13 = pwm14 = 254 - Limit_Mix(2000 + p1_y + p1_x - 127);  // reverse this side

  pwm15 = pwm16 = Limit_Mix(2000 + p1_y - p1_x + 127);


kevin.li.rit 30-01-2008 20:27

Re: 1 Joystick Control
 
It could be that one side of your motors need to be run backwards. In the standard toughbox, if both motors on both sides are run CCW then it will turn. If one is run CW and one CCW then it will go foward.

So I'm not sure how you have wired your motors, but this could be fixed in code or fixed by reversing the red and black leads on one side of your robot drive motors.

divergentdave 31-01-2008 00:55

Re: 1 Joystick Control
 
Quote:

Originally Posted by usbcd36 (Post 689083)
...Simplest way to do that is subtract the value you assign to the PWM outputs from 254:

Actually you should subtract from 255 in this case. (if Limit_Mix returns you a 255, then pwm13=254-255=-1, but the -1 wraps over the unsigned char to 255, whereas if you subtract from 255, then you will correctly get 0) So, that line should read
Code:

pwm13 = pwm14 = 255 - Limit_Mix(2000 + p1_y + p1_x - 127);

Roger 31-01-2008 07:19

Re: 1 Joystick Control
 
See also this thread.

Hmmm... I never thought about putting the subtraction outside of the Limit_Mix() function. I had it inside:

Code:

  //Put modified joystick numbers into the four motors
  //The (256- ) part reverses one side's motors so no reverse wiring is needed!

  pwm13 = pwm14 = Limit_Mix(2000 +        p1_yNew  +        p1_xNew  - 127);
  pwm15 = pwm16 = Limit_Mix(2000 + (256 - p1_yNew) - (256 - p1_xNew) + 127);

You can also create a spreadsheet to check the range.

Reversing motors isn't the only problem us programmers have to go thru. We loaded up code on our brand-spanking new robot that we've been testing on last year's robot for the past -- well, the past year, come to think of it. New robot goes all which-way crazy directions. (Didn't help that one side's motors weren't working.) Shop says "programming error!" (Yeah, right!) Check wiring from last year to this year. Red-to-red, black-to-black. Everything checks out. Turns out (40 minutes later!) new robot has one less set of gears, so motor output to wheels is now opposite from last year. Shop says "oh yeah." Sigh....

But this year we had our autonomous working (on last year's robot) before they even built the robot! Woo-hoo! :cool:

Alan Anderson 31-01-2008 07:56

Re: 1 Joystick Control
 
Quote:

Originally Posted by usbcd36 (Post 689083)
Simplest way to do that is subtract the value you assign to the PWM outputs from 254:

Guys, usbcd36 has it right. The correct value is 254.

Quote:

Originally Posted by divergentdave (Post 689254)
Actually you should subtract from 255...

You explained that by using a pwm value of 255 as an example. However, valid pwm signals are in the range 0-254, with 127 being neutral.

Quote:

Originally Posted by Roger (Post 689309)
//The (256- ) part reverses one side's motors so no reverse wiring is needed!

256 is just plain wrong.



Of course, 254 is only the right value to subtract from in theory. With the Victor's observed "neutral bias", though, it might actually work better to choose 132 as the mirror point instead of 127, and subtract from 264 instead (making sure to limit the result to 254 after the subtraction).

penguain 31-01-2008 17:19

Re: 1 Joystick Control
 
ok..... Forward goes foreward and backwards goes backwards... But left goes right and right goes left

kevin.li.rit 31-01-2008 17:53

Re: 1 Joystick Control
 
Quote:

Originally Posted by penguain (Post 689682)
ok..... Forward goes foreward and backwards goes backwards... But left goes right and right goes left

You can fix this by swapping the pwms on the left side with those on the right. (either through code or switching the pwm cables). However this will make what is now the front, the back and the back is now the front. I think if you swap what's inside the limit_mix function with the one below it, then it'll fix it without changing what's front or back.

Maybe post Your code?

Roger 01-02-2008 09:02

Re: 1 Joystick Control
 
Quote:

Originally Posted by Alan Anderson
256 is just plain wrong.

Ouch! :)

In my defense (meager as can be) I can only say I did put it inside the Limit_Mix() function, so that the function did keep the numbers in range. I'll have to check my spreadsheet numbers again, and try the 132 center point.

Tom Bottiglieri 01-02-2008 10:02

Re: 1 Joystick Control
 
This is easier.
Code:

left_motor = speed - turn_rate;
right_motor = speed + turn_rate;

Where speed and turn_rate are signed char's (subtract 127 from a u-char) and left and right motor are limited to (-128,127).


All times are GMT -5. The time now is 23:50.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi