Hallo

@Meur

Ich wuerde mir nicht so viele Gendanken ueber diesen einen Code machen. Wie auch radbruch schon festgestellt hat, wurde der eigentlich simple Code mit Funktionsdefinitionen und komeischen Bedingungen unoetig verkompliziert.
Einiges ist meiner Meinung nach nicht richtig programmiert worden:

Bei den if-Abfragen im Kollisionsfall werden naemlich zum Ueberpruefen folgende Ausdruecke verwendet:

if (t1 & 0x07)
if (t1 & 0x3

Dabei ist das & kein Vergleich sondern eine logische UND-Verknuepfung. Das Ergebniss wird dabei eins, wenn alle Bedingung eins sind. Verknuepft man Zahlen wie z.B. 17 und 13 oder beliebige andere mit Ausnahme von Null, dann erhaelt man immer eine eins. Also ist die Bedingung immer wahr (t1 hat ja im Kollisionsfall immer einen Wert).

Das erklaert auch, warum der Asuro deines Freundes immer nach rechts faehrt. Die erste Bedingung wird ganz kurz ausgefuehrt, dann kommt schon die zweite. Die ist ebenfalls wahr und wird dadurch auch ausgefuehrt. Danach fuehrt er noch den letzten Befehl fuer die Motoren (rueckaerts rechts fahren) aus, bis Msleep vollendet ist.

Warum deiner dabei jedoch anders reagiert weis ich jetzt nicht zu erklaeren.
Verwendet ihr beide die gleiche lib-Version?? Msleep ist naemlich in der beim Kauf mitgelieferten Library noch gar nicht vorhanden. Das koennte dann naemlich erklaeren, warum er bei dir stehen bleibt. Ohne die Msleep Wartezeit sind, wie radbruch schon gesagt hat, die Intervalle, in denen die Motoren ihre Befehle kriegen, zu kurz.

Ich wuerde dir raten eine anderes Kollisionsprogramm auszuprobieren.