Log in

View Full Version : Need help with ramping in VEX EasyC


T. Maty
02-11-2006, 11:07
We're trying a "For" loop and are having problems having both wheels to begin ramping. Can we insert both motors in the same "For" loop or do we have to use two "For" loops to have both motors ramp. After writing the program and trying to compile, we get an error[yy] message. This is our "For" loop statement below, and the line we receive our error in. Is this close or are we way off? Our goal is to use incrementing ramping to have the robot move in a straight line. Are we using the correct loop for using both wheels?

for ( step1 = 0 && step2 = 255 ; step1 < 127 && step2 > 127 ; step1 += 5 && step2 += 5 )

Team1611
South Effingham High School
Georgia

divergentdave
02-11-2006, 17:27
Try this
for ( step1 = 0, step2 = 255 ; step1 < 127 && step2 > 127 ; step1 += 5, step2 += 5 )
I may have my languages confused, but that should work. Earlier you were trying to use a short circuit logic operator, which doesn't always evaluate the right hand side. For example, assigning 0 to step1 also returns a 0, and the 0 gets passed to the && operator, which then interprets 0 as false, and thus doesn't even execute step2 = 255. Separating your two statements with commas explicitly tells the compiler to run both.

charrisTTI
03-11-2006, 09:20
The last example will solve the compile problem, but now I think you need to fix your logic.

for ( step1 = 0, step2 = 255 ; step1 < 127 && step2 > 127 ; step1 += 5, step2 += 5 )


If you want the motors to ramp from stopped to maximum speed in steps of 5, the statement would need to change to:

for ( step1 = 127, step2 = 127 ; step1 < 255 && step2 > 0 ; step1 += 5, step2 -= 5 )

You also need to consider that the system (the robot and motors) will not respond instantaneously to changes in pwm values. There needs to be some kind of delay between each new set values that are sent to the motors.


If step1 and step2 are unsigned char variables, there is also an issue with the increment/decrement by 5. The variables will wrap when the increment takes the value beyond 255 or the decrement takes the value beyond 0. It will take three passes before the for loop will end. Run the example below to see the problem:

#include "Main.h"

void main ( void )
{
unsigned char step1 = 127;
unsigned char step2 = 127;

PrintToScreen ( "Starting\n" ) ;
for ( step1 = 127, step2 = 127 ; step1 < 255 && step2 > 0 ; step1 += 5, step2 -= 5 )
{
PrintToScreen ( "Value of step1 is: %d\n" , (int)step1 ) ;
PrintToScreen ( "Value of step2 is: %d\n" , (int)step2 ) ;
}
PrintToScreen ( "Finished\n" ) ;
}


To address this problem:
Change increment/decrement to 1 or
use signed short instead of unsigned char and make sure that the value sent to the motors is within the range of 0 to 255.

T. Maty
03-11-2006, 11:30
Thank you for your help, it worked great.

Team 1611

The last example will solve the compile problem, but now I think you need to fix your logic.

for ( step1 = 0, step2 = 255 ; step1 < 127 && step2 > 127 ; step1 += 5, step2 += 5 )


If you want the motors to ramp from stopped to maximum speed in steps of 5, the statement would need to change to:

for ( step1 = 127, step2 = 127 ; step1 < 255 && step2 > 0 ; step1 += 5, step2 -= 5 )

You also need to consider that the system (the robot and motors) will not respond instantaneously to changes in pwm values. There needs to be some kind of delay between each new set values that are sent to the motors.

charrisTTI
03-11-2006, 12:17
Thank you for your help, it worked great.

Team 1611


See the addtional information in my edit of the original post. I added the information earlier, but the update was lost.