das geht am einfachsten mit ifs:
Code:
if(bumper nicht gedrückt)
{
    
     // hier dein Programmteil
   
}
else
{
     // die Bumperauswertung
}
NACHTEIL: der fährt dann erstmal 2m, oder eben 2cm an die wand und dann x sec gegen die wand, bis er es merkt


Bessere und schonenedere Variante:
mit Zähler und while-schleife
Code:
 // benötigt Variable zaehler (für 2m fahren wird die wohl seeeehr hoch gezählt, mach also am besten long int oder mehr)

void main(void)
{
  // initialisierungscode usw.

zaehler=0;

// Motoren an

while((zaehler < wasweißichwieviel) && (kein Bumper gedrückt))
{
  zaehler++ ;
  // wenn zaehler für die Zeitverzögerung nicht ausreicht,
  // nochmal so ne "while"-schleife (MIT "&&(Bumper.... )" )
  // evtl Batteriestand ausgeben
}

 // Motoren aus


if(BumperX gedrükt)   // auswertung für Bumper X
{
   // deine Reaktion
{

 // Auswertung der anderen Bumper


  // dann dasselbe noch mit den anderen wende- und vorwärtsbewegungen
  // NICHT VERGESSEN: zaehler nach jeder while-schleife wieder auf 0 setzen, aber NIE in einer while-schleife
}
setze für "(keine) Bumper gedrückt" eben den passenden Ausdruck ein (also z.B. "if(PIND & (1 << PD5))" )
und für "wasweißichwieviel" eben den Maximalwert, bis zu dem dein Robby die Variable "zaehler" zählen soll (die ist für die Zeitverzögerung zuständig)

EDIT: dann brauchst du deine stopwatch auch nicht mehr.
habs auch nochn bissle lesbarer gemacht