|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||||
|
|||||
|
Orientation Switch
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 CyberWolf_22, |
|
#2
|
|||||
|
|||||
|
My suggestion
Right after these lines:
Code:
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) Code:
if p4_sw_aux1 = 1 then
drive_R = 254 - drive_R
drive_L = 254 - drive_L
endif
|
|
#3
|
||||
|
||||
|
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. Code:
PWM1 = PWM1 ^ PWM2 PWM2 = PWM1 ^ PWM2 PWM1 = PWM1 ^ PWM2 Code:
drive_L = drive_L ^ drive_R drive_R = drive_L ^ drive_R drive_L = drive_L ^ drive_R |
|
#4
|
||||
|
||||
|
they easy way:
Code:
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. Last edited by Jnadke : 04-02-2003 at 02:14. |
|
#5
|
||||
|
||||
|
Quote:
|
|
#6
|
|||
|
|||
|
another way
drive_L = ((((2000 + p1_y - p1_x + 127) Min 2000 Max 2254) - 2000) * (1 - p1_sw_trig)) + (~(((2000 + p1_y - p1_x + 127) Min 2000 Max 2254) - 2000) * p1_sw_trig)
drive_R = ((((2000 + p1_y + p1_x - 127) Min 2000 Max 2254) - 2000) * (1 - p1_sw_trig)) + (~(((2000 + p1_y + p1_x - 127) Min 2000 Max 2254) - 2000) * p1_sw_trig) If you want to avoid extra lines and extra variables you can do it this way. Its a bit long but we used it last year and it worked great. |
|
#7
|
|||||
|
|||||
|
Quote:
![]() |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| spike for pressure switch? | Rob Colatutto | Rules/Strategy | 4 | 23-02-2003 15:42 |
| Using a switch before autonomous operation | KZos550 | Programming | 11 | 04-02-2003 19:12 |
| NEED HELP with Delay loop for compressor relay switch | archiver | 2001 | 10 | 24-06-2002 02:11 |
| 1 or 2 phase switch | archiver | 2001 | 0 | 24-06-2002 00:48 |
| Error found in programming for the pump and pressure switch | sjharobotics | Programming | 4 | 06-02-2002 17:46 |