thank you very much for finding this post. I am not good at English language, though, I would like to find some help. I am making Obstacle Avoiding Robot with arduino UNO. 4 wheels.
I am very beginner in programming etc. I copied from other website and modified. But only left side wheels do not revolve.
Could you find any mistakes in this code?
● Even if I disconnect V of servo motor, left wheels do not revolve.
Even if I disconnect 2 dc motors of back side, left wheel does not revolve.
(I imagined there was a shortage in battery)
**************** mod edit - code Auto formatted and posted in code tags
#include <NewPing.h>
#include <Servo.h>
//our L298N control pins
const int LeftMotorForward = 8;
const int LeftMotorBackward = 9;
const int RightMotorForward = 6;
const int RightMotorBackward = 7;
int PIN_R_VREF = 5; // PWM
int PIN_L_VREF = 10; // PWM
//sensor pins
#define trig_pin A0 //analog input 1
#define echo_pin A1 //analog input 2
#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
Servo servo_motor; //our servo name
void setup()
{
Serial.begin(9600);//
// モーターの回転速度を中間にする
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
pinMode(RightMotorForward, OUTPUT);
pinMode(LeftMotorForward, OUTPUT);
pinMode(LeftMotorBackward, OUTPUT);
pinMode(RightMotorBackward, OUTPUT);
servo_motor.attach(11); //our servo pin
servo_motor.write(95);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop()
{
Serial.print(distance);//
Serial.println("cm");
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
if (distance <= 20)
{
moveStop();
delay(300);
moveBackward();
delay(400);
moveStop();
delay(300);
distanceRight = lookRight();
delay(300);
distanceLeft = lookLeft();
delay(300);
if (distanceRight >= distanceLeft) //modifiyAdd right
{
turnRight();
moveStop();
}
else
{
turnLeft();
moveStop();
}
}
else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
servo_motor.write(40);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(95);
return distance;
}
int lookLeft()
{
servo_motor.write(170);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(95);
return distance;
delay(100);
}
int readPing()
{
delay(70);
int cm = sonar.ping_cm();
if (cm == 0)
{
cm = 250;
}
return cm;
}
void moveStop()
{
digitalWrite(RightMotorForward, LOW);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
digitalWrite(LeftMotorBackward, LOW);
}
void moveForward()
{
if (!goesForward)
{
goesForward = true;
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
}
}
void moveBackward()
{
goesForward = false;
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorForward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
}
void turnRight()
{
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorBackward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorForward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
}
void turnLeft()
{
digitalWrite(LeftMotorBackward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorForward, LOW);
digitalWrite(RightMotorBackward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250); //
delay(500);
digitalWrite(LeftMotorForward, HIGH);
digitalWrite(RightMotorForward, HIGH);
digitalWrite(LeftMotorBackward, LOW);
digitalWrite(RightMotorBackward, LOW);
analogWrite(PIN_R_VREF, 150);
analogWrite(PIN_L_VREF, 250);
}