Forum: Mikrocontroller und Digitale Elektronik Steuerung über Sensorparameter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Chris (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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

: Bearbeitet durch Moderator
von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Chris schrieb:
> Ist das überhaupt mir einer schleife zu lösen??

Du suchst eine while Kontrollstruktur

p.s.
Für die Formatierung: Falls du die Arduino IDE verwendest, probier mal 
die Tastenkombination Strg+T ;-)

von Volker K. (tobel)


Bewertung
0 lesenswert
nicht lesenswert
Es geht in einer Schleife.

Dass Problem kannst du so loesen:

Wenn Abstand < 16        (if)
{
  Solange Abstand < 30   (while)
   {
    Drehe Mover
    Messe Abstand erneut
    }
}
else Fahre geradeaus

Ich hoffe es ist verstaendlich.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.