Question: Can you explain every single part of this code to me ? thank you! Is there anything different I could do to improve this code?

Can you explain every single part of this code to me? thank you! Is there anything different I could do to improve this code?
#include
#define PIN_Motor_AIN_17
#define PIN_Motor_PWMB 6
#define PIN_Motor_PWMA 5
#define PIN_Motor_BIN_18
#define PIN_Motor_STBY 3
#define ECHO_PIN 12
#define TRIG_PIN 13
#define FULL_SPEED 150
#define CAUTION_SPEED 50
#define CLOSE_ENOUGH_DISTANCE 50
#define TOO_CLOSE_DISTANCE 10
#define ENOUGH_SPACE_DISTANCE 110
#define BACKUP_DISTANCE 20
Servo servo;
int angle =90;
struct Distances {
int left;
int right;
};
void setup(){
Serial.begin(9600);
pinMode(PIN_Motor_PWMA, OUTPUT);
pinMode(PIN_Motor_PWMB, OUTPUT);
pinMode(PIN_Motor_AIN_1, OUTPUT);
pinMode(PIN_Motor_BIN_1, OUTPUT);
pinMode(PIN_Motor_STBY, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(10);
servo.write(angle);
}
void loop(){
digitalWrite(PIN_Motor_STBY, HIGH);
float distance = readPing();
if (distance > ENOUGH_SPACE_DISTANCE){
moveForward(FULL_SPEED);
} else if (distance > CLOSE_ENOUGH_DISTANCE && distance <= ENOUGH_SPACE_DISTANCE){
moveForward(CAUTION_SPEED);
} else if (distance > TOO_CLOSE_DISTANCE && distance <= CLOSE_ENOUGH_DISTANCE){
Distances distances = Peer();
if (distances.right >= distances.left){
turnRight();
} else {
turnLeft();
}
delay(1500);
} else {
moveBackward();
delay(1000);
Stop();
delay(1000);
}
}
Distances Peer(){
Distances distances;
lookLeft();
delay(1000);
distances.left = readPing();
lookStraight();
delay(500);
lookRight();
delay(1000);
distances.right = readPing();
lookStraight();
delay(500);
return distances;
}
int readPing(){
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration_us = pulseIn(ECHO_PIN, HIGH);
float distance_cm =0.017* duration_us;
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
return distance_cm;
}
void Stop(){
digitalWrite(PIN_Motor_AIN_1, HIGH);
analogWrite(PIN_Motor_PWMA, 0);
digitalWrite(PIN_Motor_BIN_1, HIGH);
analogWrite(PIN_Motor_PWMB,0);
}
void moveForward(int speed){
digitalWrite(PIN_Motor_AIN_1, HIGH);
analogWrite(PIN_Motor_PWMA, speed);
digitalWrite(PIN_Motor_BIN_1, HIGH);
analogWrite(PIN_Motor_PWMB, speed);
}
void moveBackward(){
digitalWrite(PIN_Motor_AIN_1, LOW);
analogWrite(PIN_Motor_PWMA, FULL_SPEED);
digitalWrite(PIN_Motor_BIN_1, LOW);
analogWrite(PIN_Motor_PWMB, FULL_SPEED);
}
void lookRight(){
Stop();
servo.write(150);
}
void lookStraight(){
Stop();
servo.write(90);
}
void lookLeft(){
Stop();
servo.write(40);
}
void turnLeft(){
digitalWrite(PIN_Motor_AIN_1, HIGH);
analogWrite(PIN_Motor_PWMA, 0);
digitalWrite(PIN_Motor_BIN_1, HIGH);
analogWrite(PIN_Motor_PWMB,100);
}
void turnRight(){
digitalWrite(PIN_Motor_AIN_1, HIGH);
analogWrite(PIN_Motor_PWMA, 100);
digitalWrite(PIN_Motor_BIN_1, HIGH);
analogWrite(PIN_Motor_PWMB,0);
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!