Hi an alle mein Sketch macht nicht das was es soll

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 1);

#define x_pin A0

void setup(){
  Serial.begin(9600); 
   AFMS.begin();  // create with the default frequency 1.6KHz
 //AFMS.begin(1000);  // OR with a different frequency, say 1KHz
 
 myMotor->setSpeed(10);  // 10 rpm 
 }

void loop(){
 Serial.println(analogRead(0)); 
 
 while (analogRead(x_pin) >= 0 && analogRead(x_pin) <= 200)
 
 myMotor->step(3200, BACKWARD, DOUBLE); 
 
 while (analogRead(x_pin) > 300 && analogRead(x_pin) <= 400)
 myMotor->step(3200, FORWARD, DOUBLE); 
 }

er soll nach den steps stoppen und wen die anderen werte eintreten andersherum drehen

ich bin neu bei aduino ich muss noch viel lernen ich wäre dankbar für eure hilfe

Ok, jetzt wissen wir was der Sketch machen sollte.
Was macht der Sketch aber?

Bei jedem While Aufruf werden wieder 3200 Steps gemacht.

Grüße Uwe

er soll eine Spindel drehen er hört aber nicht auf zu drehen weil sich das sketch immer wiederholt
mein Problem ich das die Spindel irgendwann zu ende ist nach 3200 steps

die Spindel öffnet ein dachfenster

Gibts einen Grund warum du gerade eine while Schleife benutzt? Denke for wäre an der Stelle besser.

muss keine schleife sein ich wäre dankbar für andere Idehen mir ist nix anderes eingefallen ich mache das erst seit 2 tagen

ich war froh das ich das mit der schleife hinbekommen habe , und for raff ich noch nicht.

Dein Sketch entstammt wohl dem Beispiel StepperTest.ino, wenn ich das richtig sehe. Was macht dieser Test:

void loop() {
 Serial.println(analogRead(0)); 

  myMotor->step(1000, FORWARD, DOUBLE); 
  myMotor->step(1000, BACKWARD, DOUBLE);

  delay(5000);
}

Wie sieht die Ausgabe beim seriellen Monitor aus?

ein wert von 0 - 400 je nach lichteinfall

Und was macht der Motor?

while (analogRead(x_pin) >= 0 && analogRead(x_pin) <= 200)

myMotor->step(3200, BACKWARD, DOUBLE); // zurück drehen Dachfenster schlissen

while (analogRead(x_pin) > 300 && analogRead(x_pin) <= 400)

myMotor->step(3200, FORWARD, DOUBLE); // for drehen Dachfenster öffen

mein Problem ist das der stepper nicht aufhört zu drehen

danaos1972:
while (analogRead(x_pin) >= 0 && analogRead(x_pin) <= 200)

Kannst du dir bitte mal angewöhnen, kompletten Sketch und den in Code-tags zu posten.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Mit Code-Fragmenten kann man nichts anfangen.

Deine Schleife weiß nicht ob das Fenster auf oder zu ist, das musst du noch in die Abfrage einbringen damit er gar nicht erst losfährt wenn die Soll Position schon erreicht ist. Hast du Endschalter montiert?

Der Sketch macht doch genau das, was du programmiert hast. Deine merkwürdige while()-Schleife verwendest du irrtümlicherweise analog zur if()-Bedingung. Diese ist an dieser Stelle sicher verständlicher, gerade für dich als Einsteiger.
Der "Trick" besteht einfach darin, sich zu merken, wann das Fenster bereits offen ist und wann es geschlossen ist. Dazu brauchst du eine weitere Variable als Merker bzw. Zustand und die dir bekannten logischen Verknüpfungen, mit denen du bereits den Wertebereich eingeschränkt hast.
Ich würde also einmal den Analogwert abfragen und dann wie hier im Pseudocode in etwa so auswerten:

wenn sensorwert>0 UND sensorwert<200 UND FensterAuf=0 dann
{ FensterOeffnen();
  FensterAuf=1}
wenn sensorwert>300 UND sensorwert<400 UND FensterAuf=1 dann
{ FensterSchliessen();
  FensterAuf=0}

wie umsetzen

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 1);

#define sensorwert A0


void setup(){
  Serial.begin(9600); 
   AFMS.begin();  // create with the default frequency 1.6KHz
 //AFMS.begin(1000);  // OR with a different frequency, say 1KHz
 
 myMotor->setSpeed(10);  // 10 rpm 
 }

void loop(){
 Serial.println(analogRead(0)); 
 
if (analogRead(x_pin) >= 0 && analogRead(x_pin) <= 200 && auf =0 ) 
 
 { myMotor->step(3200, BACKWARD, DOUBLE =1);

 
 if (analogRead(x_pin) > 300 && analogRead(x_pin) <= 400 auf =1)
 myMotor->step(3200, FORWARD, DOUBLE auf=0);
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 1);

#define x_pin A0

void setup(){
  Serial.begin(9600); 
   AFMS.begin();  // create with the default frequency 1.6KHz
 //AFMS.begin(1000);  // OR with a different frequency, say 1KHz
 
 myMotor->setSpeed(10);  // 10 rpm 
 }

void loop(){
 Serial.println(analogRead(0)); 
 
 while (analogRead(x_pin) >= 0 && analogRead(x_pin) <= 200)
 
 { myMotor->step(3200, BACKWARD, DOUBLE);
 }
 
 while (analogRead(x_pin) > 300 && analogRead(x_pin) <= 400)
 myMotor->step(3200, FORWARD, DOUBLE); 
 }

wenn sensorwert>0 UND sensorwert<200 UND FensterAuf=0 dann
{ FensterOeffnen();
FensterAuf=1}
wenn sensorwert>300 UND sensorwert<400 UND FensterAuf=1 dann
{ FensterSchliessen();
FensterAuf=0}

kann mir das einer umsetzen

Der Sketch oben sieht doch ganz gut aus. Du hast die Variable aus aufgenommen, hast aber in der if-Bedingung nicht den Status geändert, wie ich es im Pseudocode schrieb. Auch solltest du auf die geschweiften Klammern achten - Grundlagen lernen!

Einen fertigen Code liefern wir nicht, Hilfe zur Selbsthilfe hingegen schon.