Hallo

PollSwitch() ist etwas zickig, bei Kollisionsabfragen verwende ich deshalb die direkte Abfrage des Tasteneingangs. Es werden dabei alle Tasten ausgewertet, aber nicht erkannt, welche gedrückt ist:

#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

Im Programm verwendet man das dann so:

if taste StatusLED(RED); else StatusLED(OFF);

oder

MotorSpeed(200,200);
while keine_taste;
MotorSpeed(0,0);

Selbstverständlich funktioniert das auch ohne #define:

if (!(PINC & (1<<PC4))) StatusLED(RED); else StatusLED(OFF);

ist aber nicht so schön zu lesen.

Warum fährst du eigentlich mit einer While-Schleife zurück? Mit einer if-Abfrage würde es auch funktionieren und käme dem Sinn näher: Fahre zurück, wenn eine Taste gedrückt wird. Beidesmal wird die Rückfahrbefehlsfolge einmal ausgeführt (der break ist unnötig!). Der Unterschied wäre, wenn die Wand mitfahren würde (oder ein Taster klemmt) und am Ende des Ausweichens eine Taste immer noch gedrückt ist. Dann würde mit while (aber ohne break!) der asuro sofort ein weiteres mal zurückweichen, bei if (oder while mit break) würde kurz vorwärts gesetzt und dann erst zurückgewichen. Allerdings so schnell, das mans nicht bemerkt.

Gruß

mic