Habe mir jetzt Deinen Code einmal angeschaut und habe dazu mehrere Sachen anzumerken:

1. Wie gesagt, viel Erfahrung mit Threads habe ich nicht, aber eines ist mir aufgefallen. Du rufst Thread_Start() in deiner main-Routine auf, sorgst aber nicht dafür, dass aus den Threads auch wieder herausgesprungen wird. Wie soll main() denn mitbekommen, dass Du erneut geklatscht hast? Ich glaube, an dieser Stelle liegt der Hund begraben. Vielleicht kommst Du mit Thread_Start()/Thread_Wait() weiter? Wäre jetzt eine Idee, vielleicht liege ich aber auch mangels Erfahrung daneben.


2. An einigen Stellen rufst Du Funktionen der Pro-Bot-Library auf, an anderen Stellen änderst Du direkt einzelne PortBits unter Benutzung der PortBit-Nummer oder eigens festgelegter #define-Bezeichnungen. Die meisten davon sind in der Pro-Bot-Library bereits definiert, wie etwa die LEDs oder die Funktionen zum Ein- und Auschalten des Antriebs (DRIVE_ON()/DRIVE_OFF()).
Das ist teils sehr verwirrend und lenkt das Auge evtl. vom eigentlichen Problem ab. Vielleicht fällt Dir ja beim Bereinigen der ein oder andere dadurch entstehende Fehler im Programmablauf auf.

Öffne mal die Datei C:\Programme\C-Control Pro\Libraries\PRO-BOT128_Lib.cbas und schau Dir an, was dort drinsteht. Das war für mich jedenfalls sehr aufschlussreich.


3. Du hast sehr viele teils sehr lange Verzögerungen (~2,5 s) durch Thread_Delay() eingebaut. Das behindert das Mitverfolgen des Roboterablaufs. Den ein oder anderen Aufruf kannst Du entfernen, IMO muss man dem Mikroprozessor keine 1 s geben, um seine Ports zu stellen.


Wenn ich demnächst Zeit habe, steppe ich vielleicht Deinen Code mal durch. Habe ihn bei mir in ein neues Projekt kopiert, ein wenig bereinigt und Blut geleckt.


Hoffe, ich konnte ein wenig weiterhelfen.