Code:
#include "asuro.h"
int main(void)
{
  int diff;
  Init();

  // Nur einmal initilisieren vor der Hauptschleife...
  Encoder_Init();

  while(1){

    // Wie soll die LED aus gehen wenn sie nicht 
    // ausgeschaltet wird? 
    // switched muss auch restauriert werden auf 
    // den Urzustand.
    BackLED(OFF,OFF);
    StatusLED(RED);
    switched = 0;  
    StartSwitch();

    while (!switched) {
      MotorDir(RWD,RWD);
      MotorSpeed(130,130);

      // Die variable diff bildet die Differenz aus rechtem und 
      // linkem Encoder stand ab, d.h. also die (pseudo) 
      // differenz in der Wegstrecke. 
      // Durch addition/subtraktion dieser Differenz auf die 
      // PWM des jeweils anderen Rades wird dieser Fehler
      // im Zeitmittel ausgeglichen und dein ASURO fährt
      // geradeaus. Natürlich ist dass keine exakte
      // Herangehensweise, aber eine gute Näherung.
      // Klar?! :)
      diff = encoder[RIGHT]-encoder[LEFT];
      MotorSpeed(175+diff,175-diff);
      Msleep(100);
    }


    // ...sorry, aber dein else Zweig wird niemals 
    // ausgeführt... 
    // Dass If-Konstrukt ist somit überflüssig.
    /*if(switched){ */
      BackLED(OFF,ON);
      StatusLED(YELLOW);
    /*} else {
      BackLED(OFF,OFF);
      StatusLED(RED);}
    }*/

    Msleep(100); // sonst sieht man die LED nicht...

  }

  // Nie vergessen, reine Vorsichtsmassnahme..
  while(1){}  
  return 0;

}
O.