hi , i done a basic android control programme, i use ultrasonic sensor for stop the car to be tiggered if the distance is below 50cm. the android control working well but the problem at the car not stop at the trigger distance. pls help where the mistake
char t;
const int R1PWM = 9, L1PWM = 10, R2PWM = 7, L2PWM = 8, PWM = 11;
const int trigPin = 4, echoPin = 3;
float duration, distance = 300.0;
void setup() {
pinMode(R1PWM, OUTPUT); //right motors forward
pinMode(L1PWM, OUTPUT); //right motors reverse
pinMode(R2PWM, OUTPUT); //left motors forward
pinMode(L2PWM, OUTPUT); //left motors reverse
pinMode (PWM, OUTPUT); //SPEED CONTROL
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
t = Serial.read();
Serial.println(t);
sense(); // ultrasonic detection
if (distance < 50) // if ultrasonic detection the 50 cm automtically all motors stops
{
stops();
}
else {
if (t == 'F') { //move forward(all motors rotate in forward direction)
digitalWrite(R1PWM, HIGH);
digitalWrite(L1PWM, LOW);
digitalWrite(R2PWM, LOW);
digitalWrite(L2PWM, HIGH);
analogWrite (PWM, 50);
Serial.println ("MOTOR RUNS FOERWARD");
}
else if (t == 'G') { //move reverse (all motors rotate in reverse direction)
digitalWrite(R1PWM, LOW);
digitalWrite(L1PWM, HIGH);
digitalWrite(R2PWM, HIGH);
digitalWrite(L2PWM, LOW);
analogWrite (PWM, 50);
Serial.println ("MOTOR RUNS REVERSE");
}
else if (t == 'L') { //turn right (left side motors rotate in forward direction, right side motors doesn't rotate)
digitalWrite(R1PWM, LOW);
digitalWrite(L1PWM, HIGH);
digitalWrite(R2PWM, LOW);
digitalWrite(L2PWM, HIGH);
analogWrite (PWM, 50);
Serial.println ("MOTOR RUNS RIGHT");
}
else if (t == 'R') { //turn left (right side motors rotate in forward direction, left side motors doesn't rotate)
digitalWrite(R1PWM, HIGH);
digitalWrite(L1PWM, LOW);
digitalWrite(R2PWM, HIGH);
digitalWrite(L2PWM, LOW);
analogWrite (PWM, 50);
Serial.println ("MOTOR RUNS LEFT");
}
else if (t == 'S') { //STOP (all motors stop)
digitalWrite(R1PWM, LOW);
digitalWrite(L1PWM, LOW);
digitalWrite(R2PWM, LOW);
digitalWrite(L2PWM, LOW);
Serial.println ("STOP");
}
delay(100);
}
}
}
void sense() // ultrasonic
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * .0343) / 2;
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
}
void stops() // STOP motors
{
digitalWrite(R1PWM, LOW);
digitalWrite(L1PWM, LOW);
digitalWrite(R2PWM, LOW);
digitalWrite(L2PWM, LOW);
Serial.println ("STOP OF OBS");
}