Hallo Crystal Eye,
zu 2.:
das Problem ist jicht die Zeitdauer, sondern, dass du mit startStopwatch1() die Stoppuhr erstmal starten musst. Diese Zeile hast du auskommentiert.
zu 3.:
Richtig, das ist zwar nicht programmiert, sondern direkt auf der Platine angeschlossen.
Zum Teil mit dem Rotieren: (eventuell erkläre ich hier sachen, die du schon lange kennst)
bei der funktion rotate übergibst du vier Argumente:
1. Gewünschte Geschwindigkeit
2. Richtung (Rechts oder Links)
3. Winkel
4. blocking oder nicht
da du ja solange rotieren willst, wie du ein Hindernis erkennst, kennst du ja den Winkel nicht, was du aber für rotate müsstest.
Der RP dreht sich ja, wenn eine Raupe vorwärts, die andere rückwärts dreht.
Mit setMotorDir(FWD,BWD); kannst du eine Rechtsdrehung einstellen. Der RP bewegt noch nicht.
Anstelle setMotorDir() kannst du auch changeDirection(Right); schreiben.
Damit der RP sich bewegt, befiehlst du: moveAtSpeed(60,60);
Jetzt drehen beide Raupen mit 60, links vorwärts, rechts rückwärts. Das Gibt eine Rechts-Rotation an Ort.
Sind die Geschwindigkeiten rechts und links nicht gleich, dreht er nicht mehr an Ort, sondern fährt ein Wenig.
Mit einer while - Anweisung, lässt du den RP solange mit der gewünschten Geschwindigkeit drehen, bis du keine Obstacles mehr hast.
Irgendwie sowas ähnliches:
Code:
if(obstacle_left){ //wollen wir rechts drehen
stop(); //mal anhalten
setMotorDir(FWD,BWD); //Rechtsdrehung einstellen
while (obstacle_left){ //solange wir das Hindernis haben
moveAtSpeed(80,80);//Geschwindigkeit einstellen
task_motionControl();//Motoren Starten
}
stop(); //dann wieder anhalten, sonst wird moveAtSpeed(); beibehalten, glaube ich zumindest =)
} else if (obstacle_right){
//......
}
Hoffe, du verstehst wie ich es meine. Nochmehr hoffe ich, dass meine Überlegungen aber auch richtig sind =)
MfG
Filou
Lesezeichen