aiuto retromarcia su robot

ciao a tutti, sono nuovo del forum e ringrazio anticipatamente tutti coloro che vogliono aiutarmi.
ho costruito il classico robot con due motoriduttori dc controllati in dir e pwm, e fin qui tutto ok.
dopo ho aggiunto 5 pulsanti: 1 per start/stop, 2 per aumentare e diminuire la velocità, 1 per verso di rotazione dei motori ed in fine 1 per il cottato frontale.
funziona tutto regolare apparte il contatto frontale perchè non sò che tipo di funzione usare per far arretrare il robot per tot secondi dopo che il contatto è stato chiuso e riaperto.
allego il codice(spero in modo corretto).

roberto

const int button1Pin = 5;     // the number of the pushbutton pin
const int button2Pin = 4;     // the number of the pushbutton pin
const int button3Pin = 3;     // the number of the pushbutton pin
const int button4Pin = 2;
const int button5Pin = 13;
//const int led1Pin =  13;      // the number of the LED pin
const int led2Pin =  12;
const int led3Pin =  11;
const int led4Pin =  10;
      int pwm_a = 6;  
      int pwm_b = 9;  
      int dir_a = 7;  
      int dir_b = 8;
 

int button1State= 0;
int button2State= 0;
int button3State= 0;
int button4State= 0;
int button5State= 0;

int lastbutton1State= 0;
int lastbutton2State= 0;
int lastbutton3State= 0;
int lastbutton4State= 0;

int buttonPushCounter = 0;

int motorstart = 0;
int motorrotation = 0;
int temp = 0;
void setup() {
  
  int valdir_a = (0);
  int valdir_b = (0);
  int valpwm_a=0;
  int valpwm_b=0;
 // pinMode(led1Pin, OUTPUT);     
  pinMode(led2Pin, OUTPUT); 
  pinMode(led3Pin, OUTPUT);
  pinMode(led4Pin, OUTPUT);
  pinMode(button1Pin, INPUT);    
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);
  pinMode(button4Pin, INPUT);
  pinMode(button5Pin, INPUT);
  pinMode(pwm_a, OUTPUT);  
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
  Serial.begin(9600);
}
void loop() {

  Serial.print(motorstart);
  Serial.print(motorrotation);
  Serial.println(buttonPushCounter);
  temp = millis();
  int valdir_a = (0);
  int valdir_b = (0);
  int valpwm_a = (buttonPushCounter * 63.5);
  int valpwm_b = (buttonPushCounter * 63.5);
  //map (buttonPushCounter,0,4,0,255);
  button1State = digitalRead(button1Pin);
  button2State = digitalRead(button2Pin);
  button3State = digitalRead(button3Pin);
  button4State = digitalRead(button4Pin);
  button5State = digitalRead(button5Pin);
  
 if (button3State != lastbutton3State) {
   if (button3State == HIGH) {
        buttonPushCounter++;
   }
       lastbutton3State = button3State;
 }
 if (button2State != lastbutton2State) {
   if (button2State == HIGH) {
        buttonPushCounter--;
   }
       lastbutton2State = button2State;
 }  
  
   if ((button1State == HIGH) && (lastbutton1State == LOW)) {
     motorstart = 1 - motorstart;
   }
  
  lastbutton1State = button1State;
 
 if ((button4State == HIGH) && (lastbutton4State == LOW)) {
     motorrotation = 1 - motorrotation;
   }
  
  lastbutton4State = button4State;
 
 if (motorrotation == 1) {
     valdir_a = HIGH;
     valdir_b = LOW;  
  }
   if (motorrotation == 0) {
     valdir_a = LOW;
     valdir_b = HIGH;  
  }
  
 if (motorstart == 1) {
    digitalWrite(dir_a, valdir_a);  
    digitalWrite(dir_b, valdir_b); 
    analogWrite(pwm_a, valpwm_a);  
    analogWrite(pwm_b, valpwm_b);
 }
  if (motorstart == 0) {
    digitalWrite(dir_a, LOW);  
    digitalWrite(dir_b, HIGH); 
    analogWrite(pwm_a, 0);  
    analogWrite(pwm_b, 0);
 }
 
 
   if ((motorstart == 1) && (motorrotation == 0)) {
    if (button5State == HIGH){
      for (int temp = 0; temp < 10; temp++) {
      digitalWrite(dir_a, HIGH);  
      digitalWrite(dir_b, LOW); 
      analogWrite(pwm_a, 255);  
      analogWrite(pwm_b, 0);
       Serial.print("contatto");
      
  }
 }
   }







}

Se non devi fare altro ma solo attendere un tot di tempo dopo che il robottino ha "sbattuto" il muso, potresti semplicemente mettere un controllo prima della fine del loop ed infilarci dentro un delay():

if (button5State) {
  delay(5000); //si ferma per 5000 ms -> 5 secondi
}