Vielleicht ist das Problem eher die PollSwitch Funktion. Wenn Asuro 600ms rückwärts fährt, soll er ja sofort wieder vorwärts fahren. Da er aber viel Schwung hat, geht beim Geschwindigkeitswechsel die Batteriespannung in die Knie und die PollSwitchfunktion gibt fälschlicherweise einen Wert aus.
Wie es der Zufall so will, habe ich mich genau heute morgen mit diesem Problem beschäftigt. Ich habe deshalb eine Funktion geschrieben, welche die ADC-Messung umgeht und einfach den Int1 Portpin abfragt. Damit wird absolut zuverlässig detektiert, ob eine Taste gedrückt ist.

Code:
uint8_t KeyPressed(void)
{
	uint8_t flag;

	DDRD &= ~SWITCHES;				// High Impedance ( Input )

	if(PIND&SWITCHES)flag=FALSE;
	else flag=TRUE;

	return flag;
}