button - robot PROBLEM

Hello.I have a robot and I have a main function (name: AUTO_FUNCTION() ) where the robot goes forward and if the ultrasonic find an obstacle ,the robot turns right or left accordingly the distances that sensor "read".
Also,I have 2 buttons and when I press the left button(for example) ,I call the AUTO_FUNCTION() ,and when I press the right button,I call the STOP() funtion.
but the problem is that the sensor does nothing .
After ,when I press the right button ,the robot stops(as I said) ,but after that when I press agai any button ,nothig happens...

// My problem is only the buttons ,nothing else... <<<---------
// Do not give much importance to other things...

Here is my 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;

int prev_button_state_auto = LOW;
int prev_button_state_stop = LOW;


const int button_for_auto = 13;
const int button_for_stop = 37;

const int led = 9;
int ledState = LOW;
boolean flash_enabled = false;

boolean enable_forward = true;
boolean enable_stop;
boolean enable_right;
boolean enable_left;
boolean enable_rotate_AUTO = false;

const int Trig_pin_front = 8;
const int Echo_pin_front = 10;
const int Trig_pin_right = 6;
const int Echo_pin_right = 7;
const int Trig_pin_left = 11;
const int Echo_pin_left = 12;
long duration_front , duration_right , duration_left;
float distance_front , distance_right , distance_left;



unsigned long presentMillis = 0;
unsigned long prev_Millis = 0;


void setup()
{
  pinMode(button_for_auto, INPUT);
  pinMode(button_for_stop, INPUT);


  pinMode(led, OUTPUT);
  pinMode(Echo_pin_front , INPUT);
  pinMode(Trig_pin_front , OUTPUT);
  pinMode(Echo_pin_right , INPUT);
  pinMode(Trig_pin_right , OUTPUT);
  pinMode(Echo_pin_left , INPUT);
  pinMode(Trig_pin_left , 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 ultrasonic_sensor_forward()
{
  digitalWrite(Trig_pin_front , HIGH);           
  delayMicroseconds(11);                  
  digitalWrite(Trig_pin_front , LOW);            

  duration_front = pulseIn(Echo_pin_front , HIGH);     
  distance_front = duration_front * 0.034 / 2;     
}


void ultrasonic_sensor_right()
{
  digitalWrite(Trig_pin_right , HIGH);           
  delayMicroseconds(11);                   
  digitalWrite(Trig_pin_right , LOW);           

  duration_right = pulseIn(Echo_pin_right , HIGH);  
  distance_right = duration_right * 0.034 / 2;         
}


void ultrasonic_sensor_left()
{
  digitalWrite(Trig_pin_left , HIGH);           
  delayMicroseconds(11);                  
  digitalWrite(Trig_pin_left , LOW);            

  duration_left = pulseIn(Echo_pin_left , HIGH);     
  distance_left = duration_left * 0.034 / 2;        
}


void led_on_off()
{
  unsigned long currentTime = millis();

  if (currentTime - prev_Millis >= 100)
  {
    prev_Millis = currentTime;

    if (ledState == LOW)
    {
      ledState = HIGH;
    }

    else
    {
      ledState = LOW;
    }

    digitalWrite(led, ledState);
  }
}


void check_blink_led()
{
  if (flash_enabled)
  {
    led_on_off();
  }
  else
  {
    led_off();
  }
}


void led_off()
{
  ledState = LOW;
  digitalWrite(led, ledState);
}


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 AUTO_FUNCTION()
{
  ultrasonic_sensor_forward();
  ultrasonic_sensor_right();
  ultrasonic_sensor_left();
  check_blink_led();
  unsigned long currentMillis = millis();

  if (enable_forward)
  {
    if (currentMillis - presentMillis >= 500)            
    {
      FORWARD();
      enable_forward = false;
      enable_stop = true;
      presentMillis = currentMillis;
    }
  }

  if (enable_stop && distance_front <= 10)
  {
    if (currentMillis - presentMillis >= 600)            
    {
      STOP();
      enable_stop = false;
      enable_rotate_AUTO = true;
      presentMillis = currentMillis;
    }
  }
  if (enable_rotate_AUTO)                            
  {
    if (currentMillis - presentMillis >= 500)
    {
      presentMillis = currentMillis;
      if (distance_right > distance_left)
      {
        RIGHT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
      else if (distance_right < distance_left)
      {
        LEFT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
    }
  }
}


void loop()
{
  int button_after_auto = digitalRead(button_for_auto);
  int button_after_stop = digitalRead(button_for_stop);


  if (prev_button_state_auto == LOW && button_after_auto == HIGH)
  {
    AUTO_FUNCTION();
  }
  else if (prev_button_state_stop == LOW && button_after_stop == HIGH)
  {
    STOP();
  }
}

Before put the buttons in the circuit ,the code with the AUTO_FUNCTION was running normal
So ,the problem is the buttons...

Thanks a lot and I hope you gonna help me!!!

You do not update prev_button_state_auto in the program so its value will always be LOW.

Could that be a problem, I wonder ?

No,the same thing happens ...

I changed this:

int prev_button_state_auto ;
int prev_button_state_stop ;

Also the ultrasonic sensor does not read anything while I pressed the right button...

I changed this:

Changed what exactly ?

Does the code (which you did not post) now update the "prev" button states ?

What should I do?

arduiNICK:
What should I do?

Post your code, explain the problem.

If you are going to compare the previous value of a switch input with its current state then you must save the previous value before reading it again.

Look at the StateChangeDetection example in the IDE

Ok ,I will see it...

I'm doing this,but the same thing happens again...
I followed the StateChangeDetection example as you said...

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;

int prev_button_state_auto = LOW;
int prev_button_state_stop = LOW;
int current_button_state_auto = LOW;
int current_button_state_stop = LOW;


const int button_for_auto = 13;
const int button_for_stop = 37;

const int led = 9;
int ledState = LOW;
boolean flash_enabled = false;

boolean enable_forward = true;
boolean enable_stop;
boolean enable_right;
boolean enable_left;
boolean enable_rotate_AUTO = false;

const int Trig_pin_front = 8;
const int Echo_pin_front = 10;
const int Trig_pin_right = 6;
const int Echo_pin_right = 7;
const int Trig_pin_left = 11;
const int Echo_pin_left = 12;
long duration_front , duration_right , duration_left;
float distance_front , distance_right , distance_left;



unsigned long presentMillis = 0;
unsigned long prev_Millis = 0;


void setup()
{
  pinMode(button_for_auto, INPUT);
  pinMode(button_for_stop, INPUT);


  pinMode(led, OUTPUT);
  pinMode(Echo_pin_front , INPUT);
  pinMode(Trig_pin_front , OUTPUT);
  pinMode(Echo_pin_right , INPUT);
  pinMode(Trig_pin_right , OUTPUT);
  pinMode(Echo_pin_left , INPUT);
  pinMode(Trig_pin_left , 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 ultrasonic_sensor_forward()
{
  digitalWrite(Trig_pin_front , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_front , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_front = pulseIn(Echo_pin_front , HIGH);     //επιστροφή τιμής "period"
  distance_front = duration_front * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_right()
{
  digitalWrite(Trig_pin_right , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_right , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_right = pulseIn(Echo_pin_right , HIGH);     //επιστροφή τιμής "period"
  distance_right = duration_right * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_left()
{
  digitalWrite(Trig_pin_left , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_left , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_left = pulseIn(Echo_pin_left , HIGH);     //επιστροφή τιμής "period"
  distance_left = duration_left * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void led_on_off()
{
  unsigned long currentTime = millis();

  if (currentTime - prev_Millis >= 100)
  {
    prev_Millis = currentTime;

    if (ledState == LOW)
    {
      ledState = HIGH;
    }

    else
    {
      ledState = LOW;
    }

    digitalWrite(led, ledState);
  }
}


void check_blink_led()
{
  if (flash_enabled)
  {
    led_on_off();
  }
  else
  {
    led_off();
  }
}


void led_off()
{
  ledState = LOW;
  digitalWrite(led, ledState);
}


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 AUTO_FUNCTION()
{
  // ΠΑΝΤΑ Η ΚΑΘΕ ΚΙΝΗΣΗ ΠΟΥ ΘΕΛΩ ΝΑ ΚΑΝΩ ΚΟΙΤΑΕΙ ΤΟΝ ΕΠΟΜΕΝΟ ΧΡΟΝΟ ...     < < < < < < < < < < -------------------- *** ΠΡΟΣΟΧΗ ***   !!!

  ultrasonic_sensor_forward();
  ultrasonic_sensor_right();
  ultrasonic_sensor_left();
  check_blink_led();
  unsigned long currentMillis = millis();

  if (enable_forward)
  {
    if (currentMillis - presentMillis >= 500)            //ΠΗΓΑΙΝΕΙ ΜΠΡΟΣΤΑ (FORDWARD) ΜΕΧΡΙ ΝΑ ΣΥΝΑΝΤΗΣΕΙ ΚΑΠΟΙΟ ΕΜΠΟΔΙΟ ...
    {
      FORWARD();
      enable_forward = false;
      enable_stop = true;
      presentMillis = currentMillis;
    }
  }

  if (enable_stop && distance_front <= 10)
  {
    if (currentMillis - presentMillis >= 600)            //ΘΑ ΣΤΑΜΑΤΗΣΕΙ (STOP) ΓΙΑ 500 ms ...
    {
      STOP();
      enable_stop = false;
      enable_rotate_AUTO = true;
      presentMillis = currentMillis;
    }
  }
  if (enable_rotate_AUTO)                            //ΘΑ ΣΤΡΙΨΕΙ ΔΕΞΙΑ (RIGHT) 'Η ΑΡΙΣΤΕΡΑ (LEFT),--ΑΝΑΛΟΓΑ ΤΗΝ ΕΝΔΕΙΞΗ ΤΟΥ ΑΙΣΘΗΤΗΡΑ-- ΚΑΙ ΘΑ ΣΤΡΙΨΕΙ ΓΙΑ 600 ms ...
  {
    if (currentMillis - presentMillis >= 500)
    {
      presentMillis = currentMillis;
      if (distance_right > distance_left)
      {
        RIGHT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
      else if (distance_right < distance_left)
      {
        LEFT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
    }
  }
}


void loop()
{
  current_button_state_auto = digitalRead(button_for_auto);
  current_button_state_stop = digitalRead(button_for_stop);


  if (current_button_state_auto != prev_button_state_auto)
  {
    if (current_button_state_auto == HIGH)
    {
      AUTO_FUNCTION();
    }
  }
  prev_button_state_auto = current_button_state_auto;

  if (current_button_state_stop != prev_button_state_stop)
  {
    if (current_button_state_stop == HIGH)
    {
      STOP();
    }
  }
  prev_button_state_stop = current_button_state_stop;
}

Any proposal please!!!

How are the inputs wired ?
Any pulldown resistors in place to keep the inputs in a known state or are they floating in the breeze at an unknown (possibly HIGH, possibly LOW) state ?

I use small buttons as we all know(it has 4 pinouts (2 up and 2 down) )
Down: In the left side I have the volts(5 volt) and in th right side I have the ground through a resistance
Up: In the right side(only) I have the pin (It goed to arduino).

My understanding of the problem is once you force a stop with the button the robot fails to go back to auto mode.

My reading of the code is that the AUTO_FUNCTION will do nothing if enable_forward, enable_stop and enable_rotate_AUTO are all false.

enable_rotate_AUTO only gets set to true if enable_stop is true. enable_stop only gets set to true if enable_forward is true. enable_forward only gets set to true if enable_rotate_AUTO is true.

When the function STOP gets called on line #259 the following three lines set variables enable_stop, enable_rotate_AUTO and presentMillis. Try copying those three lines to loop() after STOP is called explicitly due to a button press.

It that does not work put print statements throughout the code to tell you the values of the variables.

Now when I press a button ,nothing happens...

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;

int prev_button_state_auto = LOW;
int prev_button_state_stop = LOW;
int current_button_state_auto;
int current_button_state_stop;


const int button_for_auto = 13;
const int button_for_stop = 36;

const int led = 9;
int ledState = LOW;
boolean flash_enabled = false;

boolean enable_forward = true;
boolean enable_stop;
boolean enable_right;
boolean enable_left;
boolean enable_rotate_AUTO = false;

const int Trig_pin_front = 8;
const int Echo_pin_front = 10;
const int Trig_pin_right = 6;
const int Echo_pin_right = 7;
const int Trig_pin_left = 11;
const int Echo_pin_left = 12;
long duration_front , duration_right , duration_left;
float distance_front , distance_right , distance_left;



unsigned long presentMillis = 0;
unsigned long prev_Millis = 0;


void setup()
{
  pinMode(button_for_auto, INPUT);
  pinMode(button_for_stop, INPUT);


  pinMode(led, OUTPUT);
  pinMode(Echo_pin_front , INPUT);
  pinMode(Trig_pin_front , OUTPUT);
  pinMode(Echo_pin_right , INPUT);
  pinMode(Trig_pin_right , OUTPUT);
  pinMode(Echo_pin_left , INPUT);
  pinMode(Trig_pin_left , 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 ultrasonic_sensor_forward()
{
  digitalWrite(Trig_pin_front , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_front , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_front = pulseIn(Echo_pin_front , HIGH);     //επιστροφή τιμής "period"
  distance_front = duration_front * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_right()
{
  digitalWrite(Trig_pin_right , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_right , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_right = pulseIn(Echo_pin_right , HIGH);     //επιστροφή τιμής "period"
  distance_right = duration_right * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_left()
{
  digitalWrite(Trig_pin_left , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_left , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_left = pulseIn(Echo_pin_left , HIGH);     //επιστροφή τιμής "period"
  distance_left = duration_left * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void led_on_off()
{
  unsigned long currentTime = millis();

  if (currentTime - prev_Millis >= 100)
  {
    prev_Millis = currentTime;

    if (ledState == LOW)
    {
      ledState = HIGH;
    }

    else
    {
      ledState = LOW;
    }

    digitalWrite(led, ledState);
  }
}


void check_blink_led()
{
  if (flash_enabled)
  {
    led_on_off();
  }
  else
  {
    led_off();
  }
}


void led_off()
{
  ledState = LOW;
  digitalWrite(led, ledState);
}


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 AUTO_FUNCTION()
{
  // ΠΑΝΤΑ Η ΚΑΘΕ ΚΙΝΗΣΗ ΠΟΥ ΘΕΛΩ ΝΑ ΚΑΝΩ ΚΟΙΤΑΕΙ ΤΟΝ ΕΠΟΜΕΝΟ ΧΡΟΝΟ ...     < < < < < < < < < < -------------------- *** ΠΡΟΣΟΧΗ ***   !!!

  ultrasonic_sensor_forward();
  ultrasonic_sensor_right();
  ultrasonic_sensor_left();
  check_blink_led();
  unsigned long currentMillis = millis();

  if (enable_forward)
  {
    if (currentMillis - presentMillis >= 500)            //ΠΗΓΑΙΝΕΙ ΜΠΡΟΣΤΑ (FORDWARD) ΜΕΧΡΙ ΝΑ ΣΥΝΑΝΤΗΣΕΙ ΚΑΠΟΙΟ ΕΜΠΟΔΙΟ ...
    {
      FORWARD();
      enable_forward = false;
      enable_stop = true;
      presentMillis = currentMillis;
    }
  }

  if (enable_stop && distance_front <= 10)
  {
    if (currentMillis - presentMillis >= 600)            //ΘΑ ΣΤΑΜΑΤΗΣΕΙ (STOP) ΓΙΑ 500 ms ...
    {
      STOP();
      enable_stop = false;
      enable_rotate_AUTO = true;
      presentMillis = currentMillis;
    }
  }
  if (enable_rotate_AUTO)                            //ΘΑ ΣΤΡΙΨΕΙ ΔΕΞΙΑ (RIGHT) 'Η ΑΡΙΣΤΕΡΑ (LEFT),--ΑΝΑΛΟΓΑ ΤΗΝ ΕΝΔΕΙΞΗ ΤΟΥ ΑΙΣΘΗΤΗΡΑ-- ΚΑΙ ΘΑ ΣΤΡΙΨΕΙ ΓΙΑ 600 ms ...
  {
    if (currentMillis - presentMillis >= 500)
    {
      presentMillis = currentMillis;
      if (distance_right > distance_left)
      {
        RIGHT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
      else if (distance_right < distance_left)
      {
        LEFT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
    }
  }
}


void loop()
{
  current_button_state_auto = digitalRead(button_for_auto);
  current_button_state_stop = digitalRead(button_for_stop);


  if (prev_button_state_auto == LOW && current_button_state_auto == HIGH)        //AUTO
  {
    AUTO_FUNCTION();
  }

  //-----------------------------------------------------------------------     //STOP
  if (prev_button_state_stop == LOW && current_button_state_stop == HIGH)
  {
    STOP();
  }

}

Any advice ,please.....

I also tried this one:

void loop()
{
  current_button_state_auto = digitalRead(button_for_auto);
  current_button_state_stop = digitalRead(button_for_stop);


  if (current_button_state_auto != prev_button_state_auto)
  {
    if (current_button_state_auto == HIGH)
    {
      AUTO_FUNCTION();
    }
  }

  if (current_button_state_stop != prev_button_state_stop)
  {
    if (current_button_state_stop == HIGH)
    {
      STOP();
    }
  }
}

Will anybody help me?

Bumping after less than an hour?

Any advice ,please.....

Patience.
Some effort on your part.

arduiNICK:
Will anybody help me?

Where are you updating the previous button states in either program ?

In my last program ,I have this:

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;

int prev_button_state_auto = LOW;
int prev_button_state_stop = LOW;
int current_button_state_auto = LOW;
int current_button_state_stop = LOW;


const int button_for_auto = 13;
const int button_for_stop = 37;

const int led = 9;
int ledState = LOW;
boolean flash_enabled = false;

boolean enable_forward = true;
boolean enable_stop;
boolean enable_right;
boolean enable_left;
boolean enable_rotate_AUTO = false;

const int Trig_pin_front = 8;
const int Echo_pin_front = 10;
const int Trig_pin_right = 6;
const int Echo_pin_right = 7;
const int Trig_pin_left = 11;
const int Echo_pin_left = 12;
long duration_front , duration_right , duration_left;
float distance_front , distance_right , distance_left;



unsigned long presentMillis = 0;
unsigned long prev_Millis = 0;


void setup()
{
  pinMode(button_for_auto, INPUT);
  pinMode(button_for_stop, INPUT);


  pinMode(led, OUTPUT);
  pinMode(Echo_pin_front , INPUT);
  pinMode(Trig_pin_front , OUTPUT);
  pinMode(Echo_pin_right , INPUT);
  pinMode(Trig_pin_right , OUTPUT);
  pinMode(Echo_pin_left , INPUT);
  pinMode(Trig_pin_left , 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 ultrasonic_sensor_forward()
{
  digitalWrite(Trig_pin_front , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_front , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_front = pulseIn(Echo_pin_front , HIGH);     //επιστροφή τιμής "period"
  distance_front = duration_front * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_right()
{
  digitalWrite(Trig_pin_right , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_right , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_right = pulseIn(Echo_pin_right , HIGH);     //επιστροφή τιμής "period"
  distance_right = duration_right * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void ultrasonic_sensor_left()
{
  digitalWrite(Trig_pin_left , HIGH);           //ο πομπός διαβάζει τον υπέρηχο (ON)
  delayMicroseconds(11);                   //αναμονη για 11*(10^6) sec =11 μsec.
  digitalWrite(Trig_pin_left , LOW);            //ο πομπός δεν δεχεται κανένα μήνυμα(υπέρηχο) (OFF)

  duration_left = pulseIn(Echo_pin_left , HIGH);     //επιστροφή τιμής "period"
  distance_left = duration_left * 0.034 / 2;         //υπολογισμός απόστασης αισθητήρα - εμποδίου
}


void led_on_off()
{
  unsigned long currentTime = millis();

  if (currentTime - prev_Millis >= 100)
  {
    prev_Millis = currentTime;

    if (ledState == LOW)
    {
      ledState = HIGH;
    }

    else
    {
      ledState = LOW;
    }

    digitalWrite(led, ledState);
  }
}


void check_blink_led()
{
  if (flash_enabled)
  {
    led_on_off();
  }
  else
  {
    led_off();
  }
}


void led_off()
{
  ledState = LOW;
  digitalWrite(led, ledState);
}


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 AUTO_FUNCTION()
{
  // ΠΑΝΤΑ Η ΚΑΘΕ ΚΙΝΗΣΗ ΠΟΥ ΘΕΛΩ ΝΑ ΚΑΝΩ ΚΟΙΤΑΕΙ ΤΟΝ ΕΠΟΜΕΝΟ ΧΡΟΝΟ ...     < < < < < < < < < < -------------------- *** ΠΡΟΣΟΧΗ ***   !!!


  unsigned long currentMillis = millis();

  ultrasonic_sensor_forward();
  ultrasonic_sensor_right();
  ultrasonic_sensor_left();
  check_blink_led();

  if (enable_forward)
  {
    if (currentMillis - presentMillis >= 500)            //ΠΗΓΑΙΝΕΙ ΜΠΡΟΣΤΑ (FORDWARD) ΜΕΧΡΙ ΝΑ ΣΥΝΑΝΤΗΣΕΙ ΚΑΠΟΙΟ ΕΜΠΟΔΙΟ ...
    {
      FORWARD();
      enable_forward = false;
      enable_stop = true;
      presentMillis = currentMillis;
    }
  }

  if (enable_stop && distance_front <= 10)
  {
    if (currentMillis - presentMillis >= 600)            //ΘΑ ΣΤΑΜΑΤΗΣΕΙ (STOP) ΓΙΑ 500 ms ...
    {
      STOP();
      enable_stop = false;
      enable_rotate_AUTO = true;
      presentMillis = currentMillis;
    }
  }
  if (enable_rotate_AUTO)                            //ΘΑ ΣΤΡΙΨΕΙ ΔΕΞΙΑ (RIGHT) 'Η ΑΡΙΣΤΕΡΑ (LEFT),--ΑΝΑΛΟΓΑ ΤΗΝ ΕΝΔΕΙΞΗ ΤΟΥ ΑΙΣΘΗΤΗΡΑ-- ΚΑΙ ΘΑ ΣΤΡΙΨΕΙ ΓΙΑ 600 ms ...
  {
    if (currentMillis - presentMillis >= 500)
    {
      presentMillis = currentMillis;
      if (distance_right > distance_left)
      {
        RIGHT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
      else if (distance_right < distance_left)
      {
        LEFT();
        enable_forward = true;
        enable_rotate_AUTO = false;
      }
    }
  }
}

boolean a;
boolean b;

void loop()
{
  current_button_state_auto = digitalRead(button_for_auto);
  current_button_state_stop = digitalRead(button_for_stop);

if(current_button_state_auto )
{
  AUTO_FUNCTION();
}
if(current_button_state_stop )
{
STOP();
}

In this way,everything works correctly,but when I press the button to call AUTO_FUNCTION() ,program sticks....I think of the boolean variables I have in AUTO_FUNCTION().