For - Schleife "pausieren"

Tag zusammen,

ich habe über die Suche nichts gefunden, also bitte nicht steinigen falls es dieses Thema schon mal gab.

Die Schleife soll durchlaufen werden und an einer Stelle aussetzen bis eine Bedingung erfüllt ist und dann weiter laufen. Geht vielleicht sogar ohne ne Schleife, aber ich bekomms einfach nicht auf die Reihe.

Ich fahre über einen Joystick einen Servo. Nach nem Tastendruck wird die Position in ein Array geschrieben. Dann fahre ich zur nächsten und speichere diese ab usw.
Wenn jetzt ein 2. button gedrückt wird, soll der Servo die erste Position anfahren. (Bis hier funktioniert alles) Wenn er dort ist direkt weiter zur nächsten. Ohne delay also. Und genau das bekomme ich nicht umgesetzt. Nur über delay. Weil er ansonsten die Positionen einfach rausballert, selbst wenn der Servo noch nicht dort ist. Habe über dem Servo ein Poti als Encoder so zu sagen.

Hoffe ihr könnt mir da ein wenig weiter helfen.

Danke im Voraus

Moin,

es wird mir immer schleierhaft bleiben, warum viele glauben es gäbe per Suche immer gleich eine fertige Lösung für ihr Problem statt einfach mal strukturiert an sowas ranzugehen.

Aber egal, auch für Dein Problem gibt es einen Weg. Zeig uns dazu Deinen bisherigen Sketch, dann sehen wir weiter.

Was für ein Servo?

Es geht nur ohne for Schleife richtig. Loop ist die bereits vorhandene Schleife, mit der du das machen kannst.

Du könntest das mit den Task-Makros zum Laufen kriegen. Oder zu Fuß, mit dem Rezept in "several things at the same time".

Erstmal Danke für die Antworten.

Ich bin NICHT auf der Suche nach fertigen Lösungen. Ich wollte nur nen Tipp. Die programmiererei mach ich aus Spaß an der Freude. Da ch nichts fertiges irgednwo raus kopieren...

Im Moment habe ich eine For Schleife in der For Schleife laufen. Aber das ist bestimmt auch nicht gerade sehr elegant.

Was sind Task-Makros?

Wie kann ich meinen Sketch hier einfügen? (hab auch deswegen schon die Suche ohne Erfolg benutzt)

Danke

Deinen Sketch kannst Du in Codetags (</> oben links im Editor) einfügen.

Gruß Tommy

Ok.

Dann mal hier der Sketch... ::slight_smile:

#include <Servo.h>
Servo servoa;
Servo servob;
int Tast = 2;
int Tast2 = 3;
int Tast3 = 4;
int Joy_X = A4;
int Joy_Y = A5;
int potX;
int potY;
int jx;
int jy;
long wertX;
long wertY;
long point;
boolean buttonPressed = false;
boolean buttonPressed2 = false;
boolean buttonPressed3 = false;
double werteX[11];
long x;
int i = 0;
int points = 11;

void setup() {
  Serial.begin(9600);
  pinMode(Tast, INPUT);
  servoa.attach(5);
  servob.attach(6);
}

void loop() {

  jx = map(analogRead(A4), 0, 1023, 0, 179);
  jy = map(analogRead(A5), 0, 1023, 0, 179);
  servoa.write(jx);
  servob.write(jy);
  delay(20);

  if ((digitalRead(Tast) == HIGH) && (buttonPressed == false) && (point < 10)) {
    buttonPressed = true;
    wertX = servoa.read();
    delay(10);
    point = point + 1;
    i = point;
    points = point;
    werteX[i] = wertX;
    x = werteX[i];
    Serial.print(i), Serial.print("   "), Serial.println(x);
  }
  if (digitalRead(Tast) == LOW) {
    buttonPressed = false;
  }

  if ((digitalRead(Tast2) == HIGH) && (buttonPressed2 == false) && (point > 1)) {
    buttonPressed2 = true;
    i = 0;
    point=0;
    points=0;
    Serial.println("zurückgesetzt");
  }
  if (digitalRead(Tast2) == LOW) {
    buttonPressed2 = false;
  }

  if ((digitalRead(Tast3) == HIGH) && (buttonPressed3 == false)) {
    buttonPressed3 = true;
    
    for (int i = 1; i <= points; i++) {
      for (x = werteX[i]; x != wertX; x) {
        servoa.write(x);
        potX = analogRead(A0);
        delay(15);
        wertX = map(potX, 5, 1018, 0, 179);
        Serial.print(i);
        Serial.print("   ");
        Serial.print(x);
        Serial.print("   ");
        Serial.println(wertX);
      }
    }
    if (digitalRead(Tast3) == LOW) {
      buttonPressed3 = false;
    }
  }
}