Log in

View Full Version : Motor drive function?


Mike
14-02-2006, 21:45
Lets say I want to have a function, that somehow modifies an inputted speed and sets an inputted motor to that speed. Instinct tells me it would be something similar to

void Drive(int motor, unsigned char speed)
{
// modify inputted speed
motor = speed;
}

Drive(pwm01, 100);


However, I've tried that and it doesn't seem to work. The motors just don't spin. I'm assuming it is because when you read pwm01, it gives you the current speed that pwm01 is running at. So Drive(pwm01, 100) is similar to, say, Drive(127, 100)

What is the cause of this problem? How can I fix it?

Mark McLeod
14-02-2006, 21:58
You need to pass the parameter that will be changed in by address rather than value.

void Drive(int *motor, unsigned char speed)
{
// modify inputted speed
*motor = speed;
}

Drive(&pwm01, 100);

Mike Betts
15-02-2006, 05:04
The original code just modifies a local copy of the argument passed in. You need to "pass by reference". Typical usage is:
void Drive(int& motor, unsigned char speed)
{
// modify inputted speed
motor = speed;
}

Drive(pwm01, 100);
Mark's example works but is less common in usage. It takes the address of the variable, passes it in as a pointer, then dereferences the pointer.

Keith,

I think that you are mixing C++ with C. in C++, "int&" is a pass by reference. In C there is no pass by reference only pass by value and a pointer is the only way to do it.

Mike



To All,

Mark's post is correct. Please read K&R chapter 5 before sliding down the perilous and provocative path of pointers.

Mike

Keith Watson
15-02-2006, 11:55
Keith,

I think that you are mixing C++ with C. in C++, "int&" is a pass by reference. In C there is no pass by reference only pass by value and a pointer is the only way to do it.

MikeOops, I stand corrected. I've been using C++ for so long (since 1988) I forgot! I removed my post.