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
Lesezeichen