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();
}
}
}
