ist es nicht so, dass am anfang

for(i=0;i<10;i++)
{
PollSwitch();
}
t=PollSwitch();
hier testest du ob schalter gedrückt (10 zyclen)!!

dann gehst du in dei while
while (1) {
if (t>=1) {
..schnipp...
} else {
MotorDir (FWD,FWD);
MotorSpeed(160,160);
}
und in der while testest du den taster.

nur wird in der while nie der taster aktualisiert und somit fährt asuro immer gerade aus ....
es sei denn, der taster würde gedrückt werden bevor!!!!!!! er losfähr.

hmm das hat martin schon geschrieben...


aber in der schleife...
teste mal

Code:
 #include "asuro.h"

int main(void) {
   Init ();

   int cm90=16.5;
   int s1=10;
   int s2=20;
   int i, t;


   while (1) {
      for(i=0;i<10;i++)
   	  {
    	  PollSwitch();
   	  }
      t=PollSwitch();
      if (t>=1) { //Scahlter wurde gedrückte
         Encoder_Init();
         while (encoder[LEFT]<=cm90*3)
         {
            MotorDir(FWD,FWD);
            MotorSpeed(160,0);
         }
         cm90=0; //warum setzt du den cm90 auf 0?
         MotorDir(BREAK,BREAK);
         MotorSpeed(0,0);

      } else  {
         MotorDir (FWD,FWD);
         MotorSpeed(160,160);
      }
   }
   return 0;
}
aber sag mal wass soll da genau passieren?
taste gedrückt und dann....
1. while in if abfrage -->drehe rechts
while (encoder[LEFT]<=cm90*3)
{
MotorDir(FWD,FWD);
MotorSpeed(160,0); //rechts drehen
}
dann geradeausfahren..... (2. while)

dann setzt du cm90 auf 0 damit ist die 3. while unsinnig
cm90=0;
while (encoder[RIGHT]<=cm90*3)
{
MotorDir(FWD,FWD);
MotorSpeed(0,160);
}
danach sieht es für mich so aus als ob die s2 und s1 viel kleiner als encoder -->while wird nicht gefahren


gruß
ralf