Hallo zusammen,
Bin mir nicht sicher ob ich hier richtig bin doch falls nicht bitte in
das "richtige" Forum verschieben.
Es geht um Folgendes:
Es wird ein Sensor abgefragt. Dieser misst die Entfernung zum Objekten (
es sind alles ca. Werte )
1 | unsigned int uS1 = sonar1.ping(); //Sensor rechts
|
2 | Serial.print("Ping: ");
|
3 | Serial.print(uS1 / US_ROUNDTRIP_CM);
|
4 | Serial.println("cm");
|
5 | uS1=uS1 / US_ROUNDTRIP_CM;
|
6 | if (uS1 ==0 ){
|
7 | uS1=50;
|
8 | }
|
Es soll ein Hindernis erkannt werden und in diesem Speziellen Fall ein
Mover dreht nach Links , fährt Rückwärts oder ähnliches.
1 | if ((uS1 <= 16 )) {//abstand kleiner als 16cm
|
2 |
|
3 | //Motor A forward @ full speed
|
4 | digitalWrite(12, LOW); //drehen Links
|
5 | digitalWrite(9, LOW);
|
6 | analogWrite(3, 255);
|
7 |
|
8 | //Motor B forward @ full speed
|
9 | digitalWrite(13, HIGH);
|
10 | digitalWrite(8, LOW);
|
11 | analogWrite(11, 255);
|
12 |
|
13 | }
|
14 | }
|
15 | else {
|
16 | //Motor A forward @ full speed
|
17 | digitalWrite(12, HIGH);
|
18 | digitalWrite(9, LOW);
|
19 | analogWrite(3, 255);
|
20 |
|
21 | //Motor B forward @ full speed
|
22 | digitalWrite(13, HIGH);
|
23 | digitalWrite(8, LOW);
|
24 | analogWrite(11, 255);
|
25 | }
|
dies funktionier so weit sehr gut.
Nun zu der eigentlichen Aufgabe:
wie bewerkstelige ich das das ich so lange den Mover rückwärts bzw. nach
Links / rechts fahren lasse bis der Sensor (der ja dauernd die
Entfernung misst) z.B. 30 cm erreicht hat?
Dh. der Mover dreht sich so lange vom Hindernis bis 30 cm erreicht sind
und geht in die else Anweisung über ( hier gerade aus fahren ).?
Habe es mit :
1 | if ((uS1 <= 16 )) {//abstand kleiner als 16cm
|
2 | for (xS1==uS1; xS1 >= 30 ; xS1++)
|
3 | {
|
4 | //Motor A forward @ full speed
|
5 | digitalWrite(12, LOW);
|
6 | digitalWrite(9, LOW);
|
7 | analogWrite(3, 255);
|
8 |
|
9 | //Motor B forward @ full speed
|
10 | digitalWrite(13, HIGH);
|
11 | digitalWrite(8, LOW);
|
12 | analogWrite(11, 255);
|
13 |
|
14 | }
|
15 | }
|
16 | else {.....usw
|
probiert .... mit 0 Erfolg.
Es geht also "nur" um die Schleife wie kann ich der Sagen :
pass auf , dreh den Mover so lange bis der uS1 30 cm vom Gegenstand
entfernt ist brich die schleife bei 30 ab und da die Anweisung if false
ist führe else aus ( also fahre gerade aus) ?
Ist das überhaupt mir einer schleife zu lösen??
Hier würde ich gerne darauf hinweisen das alle anderen Lösungen ( zb.
mit 2 Sensor usw. ) nicht in Frage kommen. Mir geht es hier wirklich nur
um reine Programmierlösung.
Da ich mich leider mit C++ sehr wenig auskenne bin ich für jede
Hilfestellung dankbar.
Schöne Grüße
Chr.
--
Mit den Tags für C-Code wird es ... ein kleines bisschen lesbarer. Wenn
Du auch noch Deinen Quelltext einrücken würdest ...
-rufus