Hallo

Nanu, grad ist er doch nur nach rechts gefahren? *kopfkratz* Egal.

Um die Tasten richtig zu nutzen, solltst du dir den (inzwischen editierten ) Artikel darüber im asurowiki durchlesen.

wenn er gegen z.B. eine Wand fährt bleibt er stehen(heck LED gehen)
Gehen wohin? Wenn sie ausgehen, sollten die Motoren weiterlaufen, ansonsten sollte zumindest eine BackLED und ein Motor an sein, weil kein BackLED(ON,ON)-Befehl in deinem Programm vorkommt. Beim Stopp würden sie allerdings ausbleiben (hier sollte dann vielleicht ein BackLED(ON,ON) stehen), dann wären wir aber wieder bei einem Tastenproblem. Prüfe mal je Seite nur eine Taste mit (t1 & 1) bzw. (t1 & 32) oder den anderen Einzeltastenwerten.

Und vielleicht noch die andere Abfrage so ändern: (t1 && t2 && (t1 == t2))

(t1 == t2) prüft bitweise, das Ergebniss ist true oder false. Und dieses Ergebniss vergleichst du dann mit t1/2 mit dem logischen &&. Ich weis nicht, ob sich das Ergebniss dann ändert, aber durch die zusätzlichen Klammern kommt der Ausdruck dem näher, was du prüfen willst:

Wenn t1 true (also mindestens ein gesetztes Bit hat und deshalb logisch true ist) und t2 true ist (aus dem selben Grund wie t1) und beide Werte bitweise gleich sind (also selbes Bitmuster haben) und deshalb der Ausdruck (t1==t2) true ist, dann wurde eine Tastenkombination richtig erkannt. Verwirrt? Ich auch.

Die Prüfung des Ausdrucks wird übrigens nach dem ersten erkannten false abgebrochen. Deshalb könnte man die bitweise Überprüfung (t1==t2) zuerst machen und bei unterschiedlichen Werten, von denen aber einer der beiden == 0 ist, würde der Rest danach nicht mehr geprüft werden. Das wirkt sich dann aber erst aus, wenn t2==0 ist, und ich weis nicht, ob das bei einem RISC-Processor zeitmässig überhaupt einen Unterschied macht. Für unsere Programme spielt es sicher keine Rolle.

Viel einfacher wäre vielleicht so: ( (t1==t2) && (t1!=0) )
und weil's ein if else ist, würde dann ein einfaches (t1==t2) an dieser Stelle reichen.
Ich denke, es reicht jetzt wirklich ... *lol*

Möglich wäre noch ein sehr schnelles Umschalten zwischen links und rechts, dass sollte aber wegen dem Msleep(1000); nicht passieren.

Was macht denn dein asuro wenn du ihn in der Hand hälst und jede Taste einzeln drückst? Funktioniert dann alles erwartungsgemäß? Was macht er, wenn du dann mehrere, vor allem linke und rechte Tasten zusammen drückst?

Ich könnte ja auch dein neues Programm auf meinen asuro flashen, aber ich sitze doch eigentlich im Pool.

Gruß

mic