|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
I wrote the following code using easyC for Vex.
It's a function, it's supposed to take the angle I give it and turn in that direction. If I give it a positive angle, it turns to the right. I'm trying to make it turn to the left if I give it a negative angle, but it ain't happening. For some reason it simply turns to the right again. Any ideas? Code:
#include "Main.h"
void turn ( int angle )
{ // Turns the robot a set number of degrees
int done = 0;
int abs;
angle = angle/4 ; //For the optical sensors, one turn is 90 pulses.
if ( angle < 0 )
{
abs = -angle ;
}
else
{
abs = angle ;
}
PresetEncoder ( L_OPTICAL_SENSOR_CHANNEL , Left_Optical_Sensor ) ;
PresetEncoder ( R_OPTICAL_SENSOR_CHANNEL , Right_Optical_Sensor ) ;
StartEncoder ( L_OPTICAL_SENSOR_CHANNEL ) ;
StartEncoder ( R_OPTICAL_SENSOR_CHANNEL ) ;
while ( done != 2 )
{
Left_Optical_Sensor = GetEncoder ( L_OPTICAL_SENSOR_CHANNEL ) ;
Right_Optical_Sensor = GetEncoder ( R_OPTICAL_SENSOR_CHANNEL ) ;
if ( Left_Optical_Sensor < abs )
{
if ( angle > 0 & angle <= 90 )
{
SetMotor ( L_MOTOR , 255 ) ;
}
if ( angle >= -90 & angle < 0 )
{
SetMotor ( L_MOTOR , 0 ) ;
}
}
else
{
SetMotor ( L_MOTOR , 127 ) ;
done = done + 1 ;
StopEncoder ( L_OPTICAL_SENSOR_CHANNEL ) ;
}
if ( Right_Optical_Sensor < abs )
{
if ( angle > 0 & angle <= 90 )
{
SetMotor ( R_MOTOR , 255 ) ;
}
if ( angle >= -90 & angle < 0 )
{
SetMotor ( R_MOTOR , 0 ) ;
}
}
else
{
SetMotor ( R_MOTOR , 127 ) ;
done = done + 1 ;
StopEncoder ( R_OPTICAL_SENSOR_CHANNEL ) ;
}
}
return ;
}
Last edited by jamesgecko : 09-03-2006 at 16:43. Reason: Adding "solved" |
|
#2
|
|||
|
|||
|
Re: Turning problems in Vex autonomous.
Code:
if ( angle > 0 & angle <= 90 ) Personally, I always write multiple expressions in the following form. It is more readable and forces the precedence I want. I have to type a few more keystrokes but it is worth the correctness and clarity. Code:
if ( (angle > 0) && (angle <= 90) ) Last edited by Keith Watson : 09-03-2006 at 01:02. Reason: added not and fixed typo |
|
#3
|
|||
|
|||
|
Re: Turning problems in Vex autonomous.
Since the wheels are mounted on opposite sides of the robot, they need to be operated opposite from each other. For example: To drive straight you would use:
SetMotor ( L_MOTOR , 255 ) ; SetMotor ( R_MOTOR , 0 ) ; Try swapping the SetMotor ( R_MOTOR , 255 ) ; and SetMotor ( R_MOTOR , 0 ) ; calls. |
|
#4
|
||||
|
||||
|
Thanks, Keith. It works great now.
koenig3456: But I want the robot to turn... ;-) |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| [moderated]: NASA/VCU field problems | Stephen P | General Forum | 42 | 09-03-2006 19:59 |
| BAE Granite State Regional | MattK | Regional Competitions | 15 | 03-03-2006 23:38 |
| Autonomous Camera Integration | GregC | Programming | 2 | 06-02-2005 14:34 |
| Next Years Game? | Jeremy | General Forum | 49 | 27-04-2004 01:53 |