One Engine Doesn't Working In "if" Block

Hello,
I'm having a trouble in if block. When i'm controlling engines outside the "if method", There is no problem. All engines are working but when I try to control the engines inside the "if method", right engine doesn't working. I need your help.

#include <Servo.h>
#define engineRE 10
#define engineR1 8
#define engineR2 7
#define engineLE 11
#define engineL1 6
#define engineL2 5
#define trigPin 9
#define echoPin 12
Servo servoEngine;
int distance;
int distanceR;
int distanceL;

void setup() {
  pinMode(engineLE, OUTPUT);
  pinMode(engineL1, OUTPUT);
  pinMode(engineL2, OUTPUT);
  pinMode(engineRE, OUTPUT);
  pinMode(engineR1, OUTPUT);
  pinMode(engineR2, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(trigPin, LOW);
  pulseIn(echoPin, LOW);
  Serial.begin(9600);
  servoEngine.attach(3);
  servoEngine.write(90);
}

int calculateDistance() {
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  int duration = pulseIn(echoPin, HIGH);
  int distance = duration/58.2;
  digitalWrite(trigPin, LOW);
  pulseIn(echoPin, LOW);
  return distance;
}

void turnHead(int angle){
  servoEngine.write(angle);
}
// ------------------------------- ENGINE FUNCTIONS START ------------------------------- //
void stop(){
  analogWrite(engineRE, 0);
  analogWrite(engineLE, 0);
  digitalWrite(engineR1, LOW);
  digitalWrite(engineR2, LOW);
  digitalWrite(engineL1, LOW);
  digitalWrite(engineL2, LOW);  
}
void moveRight(int engineSpeed = 255){
  analogWrite(engineRE, engineSpeed);
  analogWrite(engineLE, engineSpeed);
  digitalWrite(engineR1, HIGH);
  digitalWrite(engineR2, LOW);
  digitalWrite(engineL1, HIGH);
  digitalWrite(engineL2, LOW);
}
void moveLeft(int engineSpeed = 255){
  analogWrite(engineRE, engineSpeed);
  analogWrite(engineLE, engineSpeed);
  digitalWrite(engineR1, LOW);
  digitalWrite(engineR2, HIGH);
  digitalWrite(engineL1, HIGH);
  digitalWrite(engineL2, LOW);
}
void moveBackward(int engineSpeed = 255){
  analogWrite(engineRE, engineSpeed);
  analogWrite(engineLE, engineSpeed);
  digitalWrite(engineR1, LOW);
  digitalWrite(engineR2, HIGH);
  digitalWrite(engineL1, LOW);
  digitalWrite(engineL2, LOW);
}
void moveForward(int engineSpeed = 255){
  analogWrite(engineRE, engineSpeed);
  analogWrite(engineLE, engineSpeed);
  digitalWrite(engineR1, HIGH);
  digitalWrite(engineR2, LOW);
  digitalWrite(engineL1, HIGH);
  digitalWrite(engineL2, LOW);
}
// ------------------------------- ENGINE FUNCTIONS END ------------------------------- //
void loop() {
  moveForward(); // At here everything is perfect.
  distance = calculateDistance();
  Serial.println(distance); 
  if (distance < 35 && distance >= 0){
    moveBackward(); // but here isn't working.
    delay(300);
    stop(); // here's working.
    delay(300);
    turnHead(0);
    distanceR = calculateDistance();
    delay(300);
    turnHead(180);
    distanceL = calculateDistance();
    delay(300);
    turnHead(90); 
    moveBackward(); // here isn't working
    delay(450);
    if ((distanceL > distanceR && distanceR > 0) || (distanceR > distanceL && distanceL<0)){
      moveLeft();
    } else{
      moveRight();
    }
    
  }
}

You need to read the documentation for the Servo library, carefully .

Hint: it's nothing to do with "if"

The problem is servo engines ? Okay thanks, i'll read.

edit : Servo attached pin 3. I've made mistake on Fritzing.
edi2 : Oh, I've got it now. When we use Servo.h library, pin 9 and pin 10's analogWrite command doesn't work. Thank you sir, i didn't see this information when I was learning Arduino.

Also, according to your original code, you appear to have two connections to pin 10.

I'm sorry but problem isn't about the servo engine. I've removed all things about the servo but result is same :confused:

So, post your code, post your schematic, post your observations.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.