Aber hallo,
dass kann ich ja so nicht auf mir sitzen lassen. Hier das Update mit "Rettungsanker":
Neue Funktion: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; }
Der asuro flipt aus wenn er sich festfährt.
Ich bin der Herr und er ist der Knecht!
Gruß
mic






Zitieren
Lesezeichen