Das wird so nichts werden. Um zu erkennen, ob während der Fahrt eine Taste gedückt wird, muss man den Tastenstatus im Programm auch einlesen. Wenn dein Programm also in einer while-Schleife ala

while (Licht[links] < white)

hängt und Licht[links] nie kleiner als white wird, wird auch nie etwas anderes gemacht, also auch kein PollSwitch(). Kein Einlesen der Tasten bedeutet eben auch, keine Reaktion auf Tasten.

Du könntest nun alle while-Schliefen um ein zusätzliches Ende per Tastendruck ergänzen, oder du überdenkst deinen Code nochmals komplett und trennst dich von deinen vielen Whiles.

Der Einbau der Tastenabfrage (keine Taste: Linienfolgen; Taste: Stopp) in deinen Code würde etwa so aussehen:

Code:
#include "asuro.h"

#define dunkel 50
#define rechts 1
#define links 0

void warte (int s)
{
    int x = 0;
   for (x = 0; x <s; x++) Sleep(72);
}

int main(void)
{

   Init();
   unsigned int Licht[2];
   int white;
   FrontLED(ON);
   warte(1000);
   LineData(Licht);
   white = (Licht[links]+Licht[rechts])/2-60;
   MotorDir(FWD,FWD);
   MotorSpeed(180,180);
   //int i = 0;


   while (1)
   
/* Abfrage der Tasten 1
	Wenn (PINC & (1<<PC4)) == true dann keine Taste gedrückt
	Es wird dann die grüne StatusLED eingeschaltet und der Linie gefolgt

	Durch die verschachtelten while-Anweisungen kommt das Programm aber
	aus manche Stellen der Liniensuche nicht mehr raus, so dass weitere
	Tastenabfragen nur in Abhängigkeit der Liniesitiation erfolgen.
*/
	
       if (PINC & (1<<PC4))

	{
	   StatusLED(GREEN);

     LineData(Licht);
     MotorSpeed(180,180);
    while (Licht[links] > white && Licht[rechts] > white)
     {
       MotorDir(FWD,FWD);
       LineData(Licht);
     }
     MotorSpeed(180,180);
     while (Licht[links] < white)
     {
       MotorDir(FWD,BREAK);
       LineData(Licht);
        while (Licht[rechts] < white)
       {
         MotorSpeed(255,180);
         LineData(Licht);
          while (Licht[links] > white)
         {
           MotorSpeed(255,180);
           LineData(Licht);
         }
       }
       MotorSpeed(180,180);
     }
     MotorSpeed(180,180);
      while (Licht[rechts] < white)
     {
       MotorDir(BREAK,FWD);
       LineData(Licht);
        while (Licht[links] < white)
       {
         MotorSpeed(180,255);
         LineData(Licht);
          while (Licht[rechts] > white)
         {
           MotorSpeed(180,255);
           LineData(Licht);
         }
       }
       MotorSpeed(180,180);
     }
    }

/* Abfrage der Tasten 2
	Bei gedrückter Taste wird dann der folgende Code ausgeführt, vorrausgesetzt,
	beim Linienfolgen wurde die Kette der while-Anweisungen durchlaufend und der
	neue Status der Tasten wird eingelesen.
*/

    else
    
    {
    StatusLED(RED);
    }

return 0;

}
Gruß

mic