Guten Morgen

Also wenn die Taste(z.B 'w') los gelassen wurde, ist ir immer noch "w23" . Beginnt jetzt der neue Schleifendurchlauf, wird mit dem Befehl SerRead(ir,1,0) so lange gewartet bis ein Zeichen eingelesen wurde. Gibst du 10 Sekunden lang kein Zeichen, führt dieser Befehl auch da zu, dass der Schleifendurchlauf 10 Sekunden lang nicht weiter geht.
Dein Asuro fährt deswegen einfach weiter, weil du ihm nicht gesagt hast, dass er stoppen soll, wenn kein Zeichen mehr eingelesen wird.

Wenn man z.B. folgendes Programm schreibt,

Code:
 
#include "asuro.h"

int main(void)
   {
       char i = 5;

       while(1)
       {
            if (i == 5)
            {
                 MotorDir(FWD,FWD);
                 MotorSpeed(120,120);
                 i = 0;
            }
        }
      return 0;
  }
Hier fährt der Asuro los, da i = 5 ist und setzt danach i auf 0. Bei den darauf folgenden Schleifendurchläufen passiert gar nix, da die If-Bedingung nicht erfüllt wird. Der Asuro fährt jetzt so lange weiter bis die Batterien alle leer sind, da nirgendwo steht, das er stoppen soll, wenn i nicht mehr 5 ist.

Also die Lösung deines Problems:
-ändere SerRead(ir,1,0) auf SerRead(ir,1,1) oder eine andere Zahl >0, damit er nicht unendlich lang auf die Eingabe eines Zeichens wartet (näheres im Handbuch auf S.65)

-setze nach jedem Schleifendurchlauf ir[0] = 'x' , somit ist beim nächsten Schleifendurchlauf ir = "x23" und da nun nicht mehr bei SerRead gewartet wird, wird die 3. If-abfrage erfüllt und dein Asuro hält automatisch nach loslassen der Taste an.

(hab ich nicht ausprobiert, ist mir nur spontan eingefallen, müsste aber trotzdem klappen)

Gruß

Flo