About my 3 in 1 car

I really need help. I want my car done before tomorrow. three codes are ready .they change modes using Bluetooth. The problem is that if i press line following button it work's bot i can't stop it from running. Here's my code,
** #include <Servo.h>
#include <NewPing.h>
#include <AFMotor.h>
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR12_1KHZ);
AF_DCMotor motor4(4, MOTOR12_1KHZ);

#define trig_pin A0
#define echo_pin A1

#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
int data;
int leftsensor;
int rightsensor;

NewPing sonar(trig_pin, echo_pin, maximum_distance);
Servo servo_motor;

void setup() {
Serial.begin(9600);
pinMode (A2, INPUT);
pinMode (A3, INPUT);

motor1.setSpeed(200);
motor2.setSpeed(200);
motor3.setSpeed(200);
motor4.setSpeed(200);

servo_motor.attach(10);

servo_motor.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);

}

void loop() {
if (Serial.available()) {
data = Serial.read();

  if (data == 'S') {
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor3.setSpeed(200);
    motor4.setSpeed(200);

    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);

  } else if (data == 'F') {
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor3.setSpeed(200);
    motor4.setSpeed(200);

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);

  } else if (data ==  'B') {
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor3.setSpeed(200);
    motor4.setSpeed(200);

    motor1.run(BACKWARD);
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);

  } else if (data == 'R' ) {
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor3.setSpeed(200);
    motor4.setSpeed(200);

    motor1.run(BACKWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(BACKWARD);

  } else if (data == 'L') {
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
  motor4.setSpeed(200);

  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);


} else if (data == 'G') {
  motor1.setSpeed(255);
  motor2.setSpeed(100);
  motor3.setSpeed(100);
  motor4.setSpeed(255);

  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);


} else if (data == 'I') {
  motor1.setSpeed(100);
  motor2.setSpeed(255);
  motor3.setSpeed(255);
  motor4.setSpeed(100);

  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
} else if (data == 'J') {
  motor1.setSpeed(100);
  motor2.setSpeed(255);
  motor3.setSpeed(255);
  motor4.setSpeed(100);

  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

} else if (data == 'H') {
  motor1.setSpeed(255);
  motor2.setSpeed(100);
  motor3.setSpeed(100);
  motor4.setSpeed(255);

  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
} else if (data == 'W') {
  while (data == 'W') {
    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 (distance >= distanceLeft) {
        turnRight();
        moveStop();
      }
      else {
        turnLeft();
        moveStop();
      }
    }
    else {
      moveForward();
    }
    distance = readPing();
  }
}
else if (data == 'U') {
  while (data == 'U') {


    leftsensor = digitalRead(A3);
    rightsensor = digitalRead (A2);

    if (digitalRead(A3) == LOW & digitalRead (A2) == LOW) {
      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
    } else if (digitalRead(A2) ==  HIGH & digitalRead (A3) == LOW) {
      motor1.run(BACKWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(BACKWARD);
    }

    else if (digitalRead(A2) == LOW & digitalRead (A3) == HIGH) {
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(FORWARD);

    }
  }
}

}
}

int lookRight() {
servo_motor.write(50);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(115);
return distance;
}

int lookLeft() {
servo_motor.write(170);
delay(500);
int distance = readPing();
delay(100);
servo_motor.write(115);
return distance;
delay(100);
}

int readPing() {
delay(70);
int cm = sonar.ping_cm();
if (cm == 0) {
cm = 250;
}
return cm;
}

void moveStop() {

motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}

void moveForward() {

if (!goesForward) {

goesForward = true;

motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);

}
}

void moveBackward() {

goesForward = false;

motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);

}

void turnRight() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);

delay(500);

motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);

}

void turnLeft() {

motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);

delay(500);

motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}

**

Please post your code properly, and a more complete description of the problem.

We like to help those that put effort into helping themselves.

  #include <Servo.h>
  #include <NewPing.h>
  #include <AFMotor.h>
  AF_DCMotor motor1(1, MOTOR12_1KHZ);
  AF_DCMotor motor2(2, MOTOR12_1KHZ);
  AF_DCMotor motor3(3, MOTOR12_1KHZ);
  AF_DCMotor motor4(4, MOTOR12_1KHZ);
  
  #define trig_pin A0
  #define echo_pin A1
  
  #define maximum_distance 200
  boolean goesForward = false;
  int distance = 100;
  int data;
  int leftsensor;
  int rightsensor;
  
  NewPing sonar(trig_pin, echo_pin, maximum_distance);
  Servo servo_motor;
  
  void setup() {
    Serial.begin(9600);
    pinMode (A2, INPUT);
    pinMode (A3, INPUT);
  
    motor1.setSpeed(200);
    motor2.setSpeed(200);
    motor3.setSpeed(200);
    motor4.setSpeed(200);
  
    servo_motor.attach(10);
  
    servo_motor.write(115);
    delay(2000);
    distance = readPing();
    delay(100);
    distance = readPing();
    delay(100);
    distance = readPing();
    delay(100);
    distance = readPing();
    delay(100);
  
  
  
  }
  
  void loop() {
    if (Serial.available()) {
      data = Serial.read();
  
      if (data == 'S') {
        motor1.setSpeed(200);
        motor2.setSpeed(200);
        motor3.setSpeed(200);
        motor4.setSpeed(200);
  
        motor1.run(RELEASE);
        motor2.run(RELEASE);
        motor3.run(RELEASE);
        motor4.run(RELEASE);
  
      } else if (data == 'F') {
        motor1.setSpeed(200);
        motor2.setSpeed(200);
        motor3.setSpeed(200);
        motor4.setSpeed(200);
  
        motor1.run(FORWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(FORWARD);
  
      } else if (data ==  'B') {
        motor1.setSpeed(200);
        motor2.setSpeed(200);
        motor3.setSpeed(200);
        motor4.setSpeed(200);
  
        motor1.run(BACKWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(BACKWARD);
  
      } else if (data == 'R' ) {
        motor1.setSpeed(200);
        motor2.setSpeed(200);
        motor3.setSpeed(200);
        motor4.setSpeed(200);
  
        motor1.run(BACKWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(BACKWARD);
  
      } else if (data == 'L') {
      motor1.setSpeed(200);
      motor2.setSpeed(200);
      motor3.setSpeed(200);
      motor4.setSpeed(200);

      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(FORWARD);


    } else if (data == 'G') {
      motor1.setSpeed(255);
      motor2.setSpeed(100);
      motor3.setSpeed(100);
      motor4.setSpeed(255);

      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);


    } else if (data == 'I') {
      motor1.setSpeed(100);
      motor2.setSpeed(255);
      motor3.setSpeed(255);
      motor4.setSpeed(100);

      motor1.run(FORWARD);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
    } else if (data == 'J') {
      motor1.setSpeed(100);
      motor2.setSpeed(255);
      motor3.setSpeed(255);
      motor4.setSpeed(100);

      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);

    } else if (data == 'H') {
      motor1.setSpeed(255);
      motor2.setSpeed(100);
      motor3.setSpeed(100);
      motor4.setSpeed(255);

      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor3.run(BACKWARD);
      motor4.run(BACKWARD);
    } else if (data == 'W') {
      while (data == 'W') {
        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 (distance >= distanceLeft) {
            turnRight();
            moveStop();
          }
          else {
            turnLeft();
            moveStop();
          }
        }
        else {
          moveForward();
        }
        distance = readPing();
      }
    }
    else if (data == 'U') {
      while (data == 'U') {


        leftsensor = digitalRead(A3);
        rightsensor = digitalRead (A2);

        if (digitalRead(A3) == LOW & digitalRead (A2) == LOW) {
          motor1.run(FORWARD);
          motor2.run(FORWARD);
          motor3.run(FORWARD);
          motor4.run(FORWARD);
        } else if (digitalRead(A2) ==  HIGH & digitalRead (A3) == LOW) {
          motor1.run(BACKWARD);
          motor2.run(FORWARD);
          motor3.run(FORWARD);
          motor4.run(BACKWARD);
        }

        else if (digitalRead(A2) == LOW & digitalRead (A3) == HIGH) {
          motor1.run(FORWARD);
          motor2.run(BACKWARD);
          motor3.run(BACKWARD);
          motor4.run(FORWARD);

        }
      }
    }
  }
}

int lookRight() {
  servo_motor.write(50);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
}

int lookLeft() {
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
  delay(100);
}

int readPing() {
  delay(70);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 250;
  }
  return cm;
}

void moveStop() {

  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

void moveForward() {

  if (!goesForward) {

    goesForward = true;

    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);
  }
}

void moveBackward() {

  goesForward = false;

  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);

}

void turnRight() {
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(BACKWARD);

  delay(500);

  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);


}

void turnLeft() {

  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(FORWARD);

  delay(500);

  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}





The car starts in Bluetooth mode. Then when we press the line following button it should go to line following mode. Then when we turn off the button it should go back to Bluetooth.

the problem is that when I press the button it works correctly. But it won't go to Bluetooth mode when i turn off the button.

when the button is on the signal is U
when it is off the signal is u

pls help me

This statement confuses me. I understand pressing a button switch. But how do you turn off the button? Are you meaning when you release the button switch?

The button is in the app.When you click it once it turn on. When you click it after that it turns off

You need to give us more information. What app are you using?

The problem is here:

Once your program has entered a loop, it will never exit, because you are not reading the Serial inside the loop and so, the data variable will never changed.

thx. i'll try that

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.