# My code isn't adjusting the speed of one of the motors and i'm not sure why

I'm trying to change the speed of motors depending on the amount of light hitting the LDRs. Here i'm trying to make it so that if the LDR has a high value than another, then the motor associated with that LDR slows down so it turns towards the light.

``````const int motorDirectionA = 9;
const int motorEnableA = 10;
const int motorDirectionB = 5;
const int motorEnableB = 6;

const int leftLDR = A0;
const int rightLDR = A1;

int motorSpeedA = 250;
int motorSpeedB = 250;

void setup()
{
Serial.begin(9600);
pinMode(motorDirectionA,OUTPUT);
pinMode(motorEnableA, OUTPUT);
pinMode(motorDirectionB,OUTPUT);
pinMode(motorEnableB, OUTPUT);

pinMode(leftLDR, INPUT);
pinMode(rightLDR, INPUT);

}

void loop()
{

digitalWrite(motorDirectionA, LOW);
analogWrite(motorEnableA, motorSpeedA);
digitalWrite(motorDirectionB, HIGH);
analogWrite(motorEnableB, motorSpeedB);

{
motorSpeedA = 80;
motorSpeedB = 210;
}
else
{
motorSpeedA = 210;
motorSpeedB = 210;
}

{
motorSpeedB = 80;
motorSpeedA = 210;
}
else
{
motorSpeedA = 210;
motorSpeedB = 210;
}
}
``````

@Maximillian Gerhardt If the left LDR is picking up more light than the right LDR, the left motor should be assigned a 'speed' of 80 whilst the right motor has a speed of 210. If the right one has more intensity, then the right motor should be assigned a speed of 80 and the left motor assigned a speed of 210.

If they're both equal each motor should have a speed of 210 (although I dont have that included in the code).

• Let `leftLDRread = a` and `rightLDRread = b`. The two `if`s don't make logical sense -- you are already covering the case `a > b` and in the `else` case `a <= b`. If `a > b` it will go into the code of the first `if` clause and in the `else` clause of the second `if`, causing both motors to have equal speed, which is probably what you see. Can you describe more clearly to what value the motor speeds should be set if leftLDRRead is greater or smaller than rightLDRread? May 14, 2018 at 19:12
• You can always edit your question to include clarifications and delete that 'answer'. Again, try to write down your wanted logic more clearly. If the light intensity on the left sensor is greater than that one of the left, what motor speeds should be assigned? What if the right one has a bigger intensity? What if they're both of equal? If you edit your question to include that wanted behaviour, you'll probably see what code you need to write. May 14, 2018 at 20:07

If the left LDR is picking up more light than the right LDR, the left motor should be assigned a 'speed' of 80 whilst the right motor has a speed of 210. If the right one has more intensity, then the right motor should be assigned a speed of 80 and the left motor assigned a speed of 210.

If they're both equal each motor should have a speed of 210 (although I dont have that included in the code).

In code you would express this as

``````void loop()
{

digitalWrite(motorDirectionA, LOW);
analogWrite(motorEnableA, motorSpeedA);
digitalWrite(motorDirectionB, HIGH);
analogWrite(motorEnableB, motorSpeedB);

//assuming motorSpeedA is the left motor
// left > right
motorSpeedA = 80;
motorSpeedB = 210;
//left < right
motorSpeedA = 210;
motorSpeedB = 80;
} else {
// left == right
motorSpeedA = 210;
motorSpeedB = 210;
}
}
``````

Also note that this is a quite primitive form of a PID controller. You want to respond to environmental influences in some kind of way, for which a PID is for.

You might find these videos interesting:

Edit: The code was fixed, a wrong variable was used (the pin number vs the read value)

• @mymotordude Retry again. Edit your question if you'd like to comment (or register an account?) May 14, 2018 at 21:19