Aber hallo,

dass kann ich ja so nicht auf mir sitzen lassen. Hier das Update mit "Rettungsanker":

Code:
/*  asuro fährt nach Anstoss einstellbare Zeit drehend zurueck mit timeout

    Der timeout "rettet" unser Baby wenn es feststeckt,
    (aber nur, wenn die Raeder nicht unterm Sofa eingeklemmt sind ;-)

    mic 4.1.2007
*/                      
#include <asuro.h>

unsigned long zurueckzeit; // Zeit Rueckwaerts in Millisekunden
unsigned long timeout; // zu lange kein Taster gedrückt
unsigned char sw,sw0,sw1,sw2; // Zwischenspeicher für Schalter k1-k6

int main(void) {
    Init();

    zurueckzeit=0; // vorwärts losfahren ohne timeout
    timeout=Gettime()+7000; // ein Defaultwert für Standartzimmer
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    BackLED(OFF,OFF);
    FrontLED(OFF);

/*  Achtung! Das funzt nur wenn die Taster richtig erkannt werden,
    sonst bleibt der asuro auf freier Strecke stehen!
*/

do {
    sw0=PollSwitch();      // Schalter einlesen und für eine Runde speichern
    sw1=PollSwitch();
    sw2=PollSwitch();
    //(sw0==sw1==sw2)?(sw=sw0):(sw=0);  // swx gleiche Tasten?
    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);
    FrontLED(OFF);
    }

    if (Gettime() > timeout) { // wir stecken fest :-(
    zurueckzeit=Gettime()+750;
    MotorSpeed(0,0);
    MotorDir(RWD,RWD);
    MotorSpeed(0,150);
    BackLED(ON,ON); // Mit voller Beleutung zurueck, etwas Show muss sein ;-)
    FrontLED(ON);
    }

    if (zurueckzeit) timeout=Gettime()+7000; // abhängig vom Gelände ;-)

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

    return 0;
}
Neue Funktion:

Der asuro flipt aus wenn er sich festfährt.

Ich bin der Herr und er ist der Knecht!

Gruß

mic