Course Content
Hands-On ESP32 Robotics: Build Smart Robots Step by Step
// =============================
// ESP32 2 Sensor Line Follower
// Sensors Outside the Black Line
// =============================


// IR Sensor Pins
#define LEFT_SENSOR  34
#define RIGHT_SENSOR 35


// Motor Pins
#define motor1A 26
#define motor1B 27
#define motor2A 14
#define motor2B 12


void setup()
{
  pinMode(LEFT_SENSOR, INPUT);
  pinMode(RIGHT_SENSOR, INPUT);


  pinMode(motor1A, OUTPUT);
  pinMode(motor1B, OUTPUT);
  pinMode(motor2A, OUTPUT);
  pinMode(motor2B, OUTPUT);
}


void loop()
{
  int left = digitalRead(LEFT_SENSOR);
  int right = digitalRead(RIGHT_SENSOR);


  // Both sensors on WHITE
  // Black line is between sensors
  if (left == HIGH && right == HIGH)
  {
    forward();
  }


  // Left sensor detects BLACK
  else if (left == LOW && right == HIGH)
  {
    turnLeft();
  }


  // Right sensor detects BLACK
  else if (left == HIGH && right == LOW)
  {
    turnRight();
  }


  // Both sensors detect BLACK
  else if (left == LOW && right == LOW)
  {
    forward();      // Change to stopRobot(); if preferred
  }
}


// =============================
// Motor Functions
// =============================


void forward()
{
  digitalWrite(motor1A, HIGH);
  digitalWrite(motor1B, LOW);


  digitalWrite(motor2A, HIGH);
  digitalWrite(motor2B, LOW);
}


void turnLeft()
{
  // Left motor Stop
  digitalWrite(motor1A, LOW);
  digitalWrite(motor1B, LOW);


  // Right motor Forward
  digitalWrite(motor2A, HIGH);
  digitalWrite(motor2B, LOW);
}


void turnRight()
{
  // Left motor Forward
  digitalWrite(motor1A, HIGH);
  digitalWrite(motor1B, LOW);


  // Right motor Stop
  digitalWrite(motor2A, LOW);
  digitalWrite(motor2B, LOW);
}


void stopRobot()
{
  digitalWrite(motor1A, LOW);
  digitalWrite(motor1B, LOW);


  digitalWrite(motor2A, LOW);
  digitalWrite(motor2B, LOW);
}
Scroll to Top