\\ Original Version was created by Md, Tawsiful Islam \\ You Can modify the Code as for your needs #include #include #include //initial motors pin AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(2, MOTOR12_1KHZ); AF_DCMotor motor3(3, MOTOR34_1KHZ); AF_DCMotor motor4(4, MOTOR34_1KHZ); char command; #define TRIG A0 #define ECHO A1 #define MAX_DISTANCE 100 NewPing sonar(TRIG, ECHO, MAX_DISTANCE); #define TONE_PIN 10 //defining pins and variables #define left A3 #define right A4 bool follow = true; void setup() { Serial.begin(9600); //Set the baud rate to your Bluetooth module. pinMode(left, INPUT); pinMode(right, INPUT); } void loop() { int distance = sonar.ping_cm(); if (distance == 0) { distance = 30; } if (distance <= 20) { NewTone(TONE_PIN, 2000); back(); int xdistance = sonar.ping_cm(); if (xdistance == 0) { xdistance = 30; } if (xdistance >= 20) { noNewTone(TONE_PIN); Stop(); } } if (Serial.available() > 0) { command = Serial.read(); Stop(); //initialize with motors stoped //Change pin mode only if new command is different from previous switch (command) { case 'F': forward(); Serial.println("Forward"); break; case 'B': back(); Serial.println("back"); break; case 'L': Left(); Serial.println("left"); break; case 'R': Right(); Serial.println("right"); break; case 'V': NewTone(TONE_PIN, 1000); break; case 'v': noNewTone(TONE_PIN); break; case 'x': Serial.println("extra on"); line_follower(); } } } void forward() { motor1.setSpeed(255); //Define Motor PWM (Speed) motor1.run(FORWARD); //rotate the motor clockwise motor2.setSpeed(255); motor2.run(FORWARD); motor3.setSpeed(255); motor3.run(FORWARD); motor4.setSpeed(255); motor4.run(FORWARD); } void forward_S() { motor1.run(FORWARD); motor1.setSpeed(80); motor2.run(FORWARD); motor2.setSpeed(80); motor3.run(FORWARD); motor3.setSpeed(80); motor4.run(FORWARD); motor4.setSpeed(80); } void back() { motor1.setSpeed(255); //Define Motor PWM (Speed) motor1.run(BACKWARD); //rotate the motor anti-clockwise motor2.setSpeed(255); motor2.run(BACKWARD); motor3.setSpeed(255); motor3.run(BACKWARD); motor4.setSpeed(255); motor4.run(BACKWARD); } void Left() { motor1.setSpeed(255); motor1.run(BACKWARD); motor2.setSpeed(255); motor2.run(BACKWARD); motor3.setSpeed(255); motor3.run(FORWARD); motor4.setSpeed(255); motor4.run(FORWARD); } void Right() { motor1.setSpeed(255); motor1.run(FORWARD); motor2.setSpeed(255); motor2.run(FORWARD); motor3.setSpeed(255); motor3.run(BACKWARD); motor4.setSpeed(255); motor4.run(BACKWARD); } void Stop() { motor1.setSpeed(0); motor1.run(RELEASE); motor2.setSpeed(0); motor2.run(RELEASE); motor3.setSpeed(0); motor3.run(RELEASE); motor4.setSpeed(0); motor4.run(RELEASE); } /////////////////////////////////////////// void line_follower() { int i = 87; forward(); delay(70); while (follow == true) { int distance = sonar.ping_cm(); if (distance == 0) { distance = 30; } // if (distance <= 15) { // Stop(); // NewTone(TONE_PIN, 2400, 1000); // if (distance >= 15) { // noNewTone(TONE_PIN); // forward(); // delay(70); // } // } // if (distance <= 17) { // // advanced_avoid(); // NewTone(TONE_PIN, 2400, 1000); // Right(); // delay(350); // forward(); // delay(270); // Stop(); // delay(500); // Left(); // delay(350); // Stop(); // delay(500); // forward(); // delay(300); // Stop(); // delay(500); // Left(); // delay(350); // forward_S(); // while (follow == true) { // if (digitalRead(left) == 0) { // //turn right // Stop(); // Left(); // delay(300); // break; // } // } // } if (!digitalRead(left) == 0 && !digitalRead(right) == 0) { //Forward motor1.run(FORWARD); motor1.setSpeed(i); motor2.run(FORWARD); motor2.setSpeed(i); motor3.run(FORWARD); motor3.setSpeed(i); motor4.run(FORWARD); motor4.setSpeed(i); Serial.println(("Forward")); } else if (!digitalRead(left) == 0 && digitalRead(right) == 0) { //turn right Stop(); motor1.setSpeed(200); motor1.run(FORWARD); motor2.setSpeed(200); motor2.run(FORWARD); motor3.setSpeed(200); motor3.run(BACKWARD); motor4.setSpeed(200); motor4.run(BACKWARD); Serial.println(("Right")); delay(70); } else if (digitalRead(left) == 0 && !digitalRead(right) == 0) { //turn left Stop(); motor1.setSpeed(200); motor1.run(BACKWARD); motor2.setSpeed(200); motor2.run(BACKWARD); motor3.setSpeed(200); motor3.run(FORWARD); motor4.setSpeed(200); motor4.run(FORWARD); Serial.println(("Left")); delay(70); } else if (digitalRead(left) == 0 && digitalRead(right) == 0) { // stop motor1.run(RELEASE); motor1.setSpeed(0); motor2.run(RELEASE); motor2.setSpeed(0); motor3.run(RELEASE); motor3.setSpeed(0); motor4.run(RELEASE); motor4.setSpeed(0); break; } } } // void advanced_avoid() { // NewTone(TONE_PIN, 2400, 1000); // Stop(); // delay(100); // Right(); // delay(350); // Stop(); // int rdistance = sonar.ping_cm(); // delay(2500); // if (rdistance == 0) { // rdistance == 100; // } // if (rdistance >= 50) { // forward(); // delay(300); // Stop(); // delay(500); // Left(); // delay(350); // Stop(); // delay(500); // forward(); // delay(350); // Stop(); // delay(500); // Left(); // delay(350); // forward_S(); // while (follow == true) { // if (digitalRead(right) == 0) { // //turn right // Stop(); // Right(); // delay(300); // break; // } // } // } // else if (rdistance < 15) { // Left(); // delay(350); // Stop(); // delay(250); // Left(); // delay(350); // Stop(); // int ldistance = sonar.ping_cm(); // delay(2500); // if (ldistance == 0) { // ldistance == 100; // } // if (ldistance < 15) { // NewTone(TONE_PIN, 1000); // } // else { // forward(); // delay(300); // Stop(); // delay(500); // Right(); // delay(350); // Stop(); // delay(500); // forward(); // delay(350); // Stop(); // delay(500); // Right(); // delay(350); // forward_S(); // while (follow == true) { // if (digitalRead(left) == 0) { // //turn right // Stop(); // Left(); // delay(300); // break; // } // } // } // } // }