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
Lesezeichen