stepper motor soll seine schritte zählen und Bewegungsbereich begrenzen

Hallo Leute, ich bin absoluter Neuling und hoffe hier auf schnelle Hilfe.

Ich bin gerade auf einer Lichtmesse in Frankfurt (falls jemand eine Freikarte möchte!!) und stelle hier mit meiner Hochschule aus. Ich stelle eine interaktive Leuchte aus. Sie reagiert auf eine sich nähernde oder zurückweichende Person in dem sie von einem Motor hoch gezogen oder herunter gelassen wird. Mein Problem: Ich möchte dass der Motor seine Schritte zählt und nicht höher als 5000 steps geht und nicht unter 0

Könnte ihr mir helfen? Ich dachte ich habe es in die if Funktion eingebaut.

#define trigPin 7
#define echoPin 8

#define STEPS 200
#include <Stepper.h>
Stepper stepper(STEPS, 1, 2, 3, 4);
int steps = 0;
int temp;
long distance;
void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  stepper.setSpeed(100);
}

void loop() {
  long duration;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
//  delayMicroseconds(1000); - Removed this line
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  
  int tmp_distance = (duration/2) / 29.1;
  if (tmp_distance >= 250 || tmp_distance <= 10){
    Serial.println("Out of range");
  }
  else {
    temp = distance;
    distance = tmp_distance;
    int differenz = temp - distance;
    Serial.print("Differenz: ");
    Serial.print(differenz);
    Serial.println(" cm");
   /*Serial.print("Distance: ");
    Serial.print(distance);
    Serial.println(" cm");*/
    Serial.println("----");
//Näher kommen
   if (differenz > 5 && differenz < 50 && steps <= 5000) {
      stepper.step((differenz*24)*-1);   
      steps = steps + differenz*24;
      
    }
///Weg gehen
    if (differenz < -5 && differenz > -50 && steps >= 0) {
     
      stepper.step((differenz*24)*-1);
      steps = steps + (differenz*24);
      
    }
  }
  Serial.print("Steps: ");
  Serial.println(steps);
  delay(200);
  
  
  
}

Ein Steppermotor kann keine Schritte zählen - aber Du kannst ihm sagen wieviele er machen soll und wenn er richtig dimensioniert ist macht er das dann auch. Ansonsten kann er auch mal Schritte verlieren wenn die Last zu groß ist.

Hilft Dir das?

ich möchte dass der Motor nur geht wenn er in diesem Fall noch unter 5000 steps ist.
die steps die er geht soll er immer dazu zählen oder abziehen.

irgendwann sollte die if Bedingung nicht mehr zutreffen und er dürfte den Moto nur noch in die eine Richtung drehen. Er dreht aber einfach weiter.

if (differenz > 5 && differenz < 50 && steps <= 5000) {
      stepper.step(differenz*24);   
      steps = steps + differenz*24;

Hmmm, Crosspost :confused: Nicht schön

Mach weiter im englischen Forum, da gab's ja schon Tipps.