Hallo

Mein Ansatz für das Anstossproblem dieser Tage und der Versuch einer zuverlässigen Tastenabfrage sieht so aus:

Code:
/*  asuro fährt nach Anstoss einstellbare Zeit drehend(!) zurueck
    mic 4.1.2007
*/
#include <asuro.h>

unsigned long zurueckzeit;           // Zeit Rueckwaerts in Millisekunden
unsigned char sw,sw0,sw1,sw2;          // Zwischenspeicher für Schalter k1-k6

int main(void) {
    Init();

    zurueckzeit=0;         // vorwärts losfahren
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    BackLED(OFF,OFF);

/*  Achtung! Das funzt nur wenn die Taster richtig erkannt werden!
*/

do {
    sw0=PollSwitch();      // Schalter einlesen und für eine Runde speichern
    sw1=PollSwitch();
    sw2=PollSwitch();
    if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0;

    if (!zurueckzeit && (sw==32)) {
    zurueckzeit=Gettime()+750; // Aktuelle Zeit plus x millisek. zurueck
    MotorSpeed(0,0);
    MotorDir(RWD,RWD);
    MotorSpeed(90,150);
    BackLED(ON,OFF);
    }

    if (!zurueckzeit && (sw==16)) {
    zurueckzeit=Gettime()+1500; // Aktuelle Zeit plus x millisek. zurueck
    MotorSpeed(0,0);
    MotorDir(RWD,RWD);
    MotorSpeed(90,150);
    BackLED(ON,OFF);
    }

    if (!zurueckzeit && (sw==2)) {
    zurueckzeit=Gettime()+1500; // Aktuelle Zeit plus x millisek. zurueck
    MotorSpeed(0,0);
    MotorDir(RWD,RWD);
    MotorSpeed(150,90);
    BackLED(OFF,ON);
    }

    if (!zurueckzeit && (sw==1)) {
    zurueckzeit=Gettime()+750; // Aktuelle Zeit plus x millisek. zurueck
    MotorSpeed(0,0);
    MotorDir(RWD,RWD);
    MotorSpeed(150,90);
    BackLED(OFF,ON);
    }

    if (zurueckzeit && (Gettime() > zurueckzeit)) { // Lange genug zurueck?
    zurueckzeit=0;
    MotorSpeed(0,0);
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    BackLED(OFF,OFF);
    }

}while (1); // mainloop (Endlosschleife)

    return 0;
}
Die Tasten werden 3x abgefragt und bei Gleichheit als gültig gewertet.

Die Funktionen der Tasten:

k1(Wert1): asuro fährt kurze Zeit rückwärts drehend rechts mit BackLED
k2(Wert2): asuro fährt lange Zeit rückwärts drehend rechts mit BackLED
k5(Wert16): asuro fährt lange Zeit rückwärts drehend links mit BackLED
k6(Wert32): asuro fährt kurze Zeit rückwärts drehend links mit BackLED

Das funktioniert bei meinem asuro fast tadellos. "Fast" weil unglaublicherweise dies geschah:

Bild hier  

Blöderweise werden k3 und k4 nicht abgefragt. Aber wer hätte gedacht, dass die Testfahrt nach zwei Minuten so endet?

Gruß

mic