Hallo

Mir fällt es echt schwer aus den hingeworfenen Brocken den Zusammenhang des Programms zu erkennen. Wenn du schon so eigenwilige Wege gehst, solltest du mehr Infos rauslassen.

Da ich die Switch()-Funktionen nur aus meiner 2.3er Version der Lib kenne (aber noch nie verwendet habe) ist der Einstieg etwas zäh. Für mich scheint der Fehler in der fehlenden Kommunikation der ISR mit dem Hauptprogamm zu entstehen. Beim ersten Beispiel wird die MotorSpeed() einmal gesetzt und in der ISR nach dem Tastendruck wieder gelöscht. Beim Beschleunigen wird aber immer erneut MotorSpeed() gesetzt, auch wenn die ISR aktiv war. Wie in der orginalen LIB benötigt man ein in der ISR gesetztes Flag (heißt dort switched) das in der Beschleunigungsschleife abgefragt wird und nach der ISR das Beschleunigen abbricht:

Code:
      for(momentan=start; momentan<end; momentan++)
   {
      Geschwindigkeit(momentan, momentan);
      Warte(zeitschritt);
      if(switched) break;
   }
Gruß

mic