I am trying to write a program that when p4_sw_aux1 = 1 the robots orientation changes so that when joy1_y is 254 full reverse and when joy1_y is 0 then full foward same will go for the X axis.
I wish to do this in the single joystick drive code and can not get it to work write. Plz can anyone give me an example of how this might work.
Thanks in advance
If you’re really planning on changing the orientation of the robot, forwards to backwards, you also have to swap the values of the PWM outputs, switching left for right, and vice versa, or else you’ll be sending signals meant for the left side of the robot to the right, and signals meant for the right to the left.
I did this operation last year, for our roller/claw robot, first by doing what gwross already pointed out, which is inverting the PWM value around 127, then by XORing the values with eachother to swap them, without going through a third temp variable.
drive_L var byte
drive_R var byte
tempjoystick var byte
drive_R = (((2000 + p1_y + p1_x - 127) Min 2000 Max 2254) - 2000)
drive_L = (((2000 + p1_y - p1_x + 127) Min 2000 Max 2254) - 2000)
'single joystick drive code
if p4_sw_aux1 = 1 then
tempdrive = drive_R
drive_R = 254-drive_L
drive_L = 254-tempjoystick
endif
Works like a charm. I used it last year on our robot.
Basically, you want to do the reverse code AFTER you figure out how fast you want each motor to go (assuming you’re doing a 2 motor drivetrain, tank-style). It may not be pretty, or efficient, but it’s guaranteed to work.
Not only do you have to reverse the drive speeds, but also you must remember to flip the left and right motor values, or you will find that the x-axis will be backwards.
drive_L var byte
drive_R var byte
tempjoystick var byte
drive_R = (((2000 + p1_y + p1_x - 127) Min 2000 Max 2254) - 2000)
drive_L = (((2000 + p1_y - p1_x + 127) Min 2000 Max 2254) - 2000)
'single joystick drive code
if p4_sw_aux1 = 1 then
**tempdrive** = drive_R
drive_R = 254-drive_L
drive_L = 254-**tempjoystick**
endif
Your code is correct except for what is bolded. You are using two different Variables. Probably just an error when you typed it. Your code is similar to what I use on our robot.