Hello again guys.I have a problem with my robot.I want it to go forward and if the distance <=10 ,then stop for 2 sec then turn right for 1 sec. and then go forward again...
The problem is that the robot when the distance <= 10 ,stops { while distance <= 10 } and then go forward.
Nor stops for 2 sec ,nor turn right for 1 sec...
Any help ,please.....I tried many methods ,but still nothing.
CODE:
const int IN_1_back_left = 53;
const int IN_2_back_left = 51;
const int PWM_back_left = 2;
const int IN_1_back_right = 49;
const int IN_2_back_right = 47;
const int PWM_back_right = 3;
const int IN_1_front_left = 45;
const int IN_2_front_left = 43;
const int PWM_front_left = 4;
const int IN_1_front_right = 41;
const int IN_2_front_right = 39;
const int PWM_front_right = 3;
boolean enable_stop;
boolean enable_right;
unsigned long presentMillis = 0;
const int Trig_pin = 8;
const int Echo_pin = 10;
void setup()
{
Serial.begin(9600);
pinMode(Echo_pin , INPUT);
pinMode(Trig_pin , OUTPUT);
analogWrite(PWM_back_left , 255);
analogWrite(PWM_back_right , 255);
analogWrite(PWM_front_left , 255);
analogWrite(PWM_front_right , 255);
pinMode(PWM_back_left, OUTPUT);
pinMode(PWM_back_right, OUTPUT);
pinMode(PWM_front_left, OUTPUT);
pinMode(PWM_front_right, OUTPUT);
pinMode(IN_1_back_left, OUTPUT);
pinMode(IN_2_back_left, OUTPUT);
pinMode(IN_1_back_right, OUTPUT);
pinMode(IN_2_back_right, OUTPUT);
pinMode(IN_1_front_left, OUTPUT);
pinMode(IN_2_front_left, OUTPUT);
pinMode(IN_1_front_right, OUTPUT);
pinMode(IN_2_front_right, OUTPUT);
}
void FORWARD()
{
flash_enabled = false;
digitalWrite(IN_1_back_left , HIGH); //fordward
digitalWrite(IN_2_back_left , LOW);
digitalWrite(IN_1_back_right , HIGH);
digitalWrite(IN_2_back_right , LOW);
digitalWrite(IN_1_front_left , HIGH);
digitalWrite(IN_2_front_left , LOW);
digitalWrite(IN_1_front_right , HIGH);
digitalWrite(IN_2_front_right , LOW);
}
void BACKWARD()
{
flash_enabled = false;
digitalWrite(IN_1_back_left , LOW); //backward
digitalWrite(IN_2_back_left , HIGH);
digitalWrite(IN_1_back_right , LOW);
digitalWrite(IN_2_back_right , HIGH);
digitalWrite(IN_1_front_left , LOW);
digitalWrite(IN_2_front_left , HIGH);
digitalWrite(IN_1_front_right , LOW);
digitalWrite(IN_2_front_right , HIGH);
}
void STOP()
{
flash_enabled = true;
digitalWrite(IN_1_back_left , LOW); //stop
digitalWrite(IN_2_back_left , LOW);
digitalWrite(IN_1_back_right , LOW);
digitalWrite(IN_2_back_right , LOW);
digitalWrite(IN_1_front_left , LOW);
digitalWrite(IN_2_front_left , LOW);
digitalWrite(IN_1_front_right , LOW);
digitalWrite(IN_2_front_right , LOW);
}
void RIGHT()
{
flash_enabled = false;
digitalWrite(IN_1_back_left , HIGH); //right
digitalWrite(IN_2_back_left , LOW);
digitalWrite(IN_1_back_right , LOW);
digitalWrite(IN_2_back_right , HIGH);
digitalWrite(IN_1_front_left , HIGH);
digitalWrite(IN_2_front_left , LOW);
digitalWrite(IN_1_front_right , LOW);
digitalWrite(IN_2_front_right , HIGH);
}
void LEFT()
{
flash_enabled = false;
digitalWrite(IN_1_back_left , LOW); //left
digitalWrite(IN_2_back_left , HIGH);
digitalWrite(IN_1_back_right , HIGH);
digitalWrite(IN_2_back_right , LOW);
digitalWrite(IN_1_front_left , LOW);
digitalWrite(IN_2_front_left , HIGH);
digitalWrite(IN_1_front_right , HIGH);
digitalWrite(IN_2_front_right , LOW);
}
void loop()
{
unsigned long currentMillis = millis();
//ultrasonic_sensor();
long duration;
float distance;
digitalWrite(Trig_pin , HIGH);
delayMicroseconds(11);
digitalWrite(Trig_pin , LOW);
duration = pulseIn(Echo_pin , HIGH);
distance = duration * 0.034 / 2;
Serial.println(distance);
check_blink_led();
if (distance <= 10)
{
enable_stop = true;
if (enable_stop && currentMillis - presentMillis >= 2000)
{
STOP();
enable_stop = false;
enable_right = true;
presentMillis = currentMillis;
}
}
if (enable_right)
{
if (currentMillis - presentMillis >= 1000)
{
RIGHT();
enable_right = false;
presentMillis = currentMillis;
}
}
else
{
FORWARD();
}
}
millis() only...