Hallo ; Ik ben een kartelmessen slijper aan het maken, nu wil ik dat een Nema17 stepper motor het mes elke keer 6mm opschuift als ik op de button druk d sketch werkt wel hij draait liks om bij het in drukken van de button gaat hij rechts om, maar dat moet dus ook weer links om. hoe pas ik dit aan zie sketch .

#include <AccelStepper.h> // Bibliotheek voor het aansturen van de stappenmotor

// Pin definities
#define stepPin 3    // Pin voor de stap puls
#define dirPin 4     // Pin voor de draairichting
#define buttonPin 2  // Pin voor de drukknop

// Maak een AccelStepper object aan
AccelStepper stepper(1, stepPin, dirPin); // 1 = enkelvoudige motor, stepPin en dirPin zijn de pinnen

void setup() {
  pinMode(buttonPin, INPUT_PULLUP); // Stel de knop in als input met interne pull-up weerstand
  stepper.setMaxSpeed(2000);         // Stel de maximale snelheid in 
  stepper.setAcceleration(500);      // Stel de versnelling in
}

void loop() {
  // Draai 1000 pulsen heen
  stepper.moveTo(-1000);
  stepper.runToPosition(); // Wacht tot de motor de positie heeft bereikt

  // Wacht tot de knop wordt ingedrukt
  waitForButtonPress();

  // Draai 1500 pulsen heen
  stepper.moveTo(1500); // Nieuwe positie is de huidige positie + 1500
  stepper.runToPosition(); // Wacht tot de motor de positie heeft bereikt

  // Wacht tot de knop wordt ingedrukt
  waitForButtonPress();
}

// Functie om te wachten op een druk op de knop
void waitForButtonPress() {
  while (digitalRead(buttonPin) == HIGH) {
    // Wacht terwijl de knop niet ingedrukt is
  }
  
  // Wacht een korte tijd omwisseling te voorkomen bij continu drukken
  delay(200); // Debounce delay
}

Knip de draad aan pin 4 door?

Verder je openingspost 6x proberen te lezen, geen nederlands uit op te maken

Een programma laten wachten op een knopdruk is meestal niet het correcte. In deze kom je er misschien nog mee weg.

Een boolean toevoegen.


#include <AccelStepper.h> // Bibliotheek voor het aansturen van de stappenmotor

// Pin definities
#define stepPin 3    // Pin voor de stap puls
#define dirPin 4     // Pin voor de draairichting
#define buttonPin 2  // Pin voor de drukknop

// Maak een AccelStepper object aan
AccelStepper stepper(1, stepPin, dirPin); // 1 = enkelvoudige motor, stepPin en dirPin zijn de pinnen

bool flgRichting;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP); // Stel de knop in als input met interne pull-up weerstand
  stepper.setMaxSpeed(2000);         // Stel de maximale snelheid in 
  stepper.setAcceleration(500);      // Stel de versnelling in
}

void loop() {
  // Draai 1000 pulsen heen
  if(flgRichting){
    stepper.moveTo(-1000);
    stepper.runToPosition(); // Wacht tot de motor de positie heeft bereikt
    // Wacht tot de knop wordt ingedrukt
    waitForButtonPress();
  }
  else{
    // Draai 1500 pulsen heen
    stepper.moveTo(1500); // Nieuwe positie is de huidige positie + 1500
    stepper.runToPosition(); // Wacht tot de motor de positie heeft bereikt

    // Wacht tot de knop wordt ingedrukt
    waitForButtonPress();

  }
}



// Functie om te wachten op een druk op de knop
void waitForButtonPress() {
  while (digitalRead(buttonPin) == HIGH) {
    // Wacht terwijl de knop niet ingedrukt is
  }
  flgRichting = !flgRichting;
  // Wacht een korte tijd omwisseling te voorkomen bij continu drukken
  delay(200); // Debounce delay
}

Niet getest. Dus geen garantie. Maar dit blijft een even slechte code. Er zitten nog wat haken en ogen aan. De debounce is geen echte debounce.

ezButton is een handige lib voor knoppen. Hoeft je programma ook niet te blijven hangen in de while lus. Maar dan moet ook de rest van het programma aangepast worden.

DK; Morgen is het pas 1 April :) Ik ga het programma uitproberen .

"Move to", ben je absolute positionering aan het gebruiken op een plek waar je gewoon zou kunnen zeggen "doe 1000 stappen vooruit"?

stepper.moveto(x) geeft een aantal stappen totdat positie x wordt bereikt. Je loop stapt nu tussen positie -1000 en +1500 heen en weer. Als je verder wilt stappen dan moet je een groter getal gebruiken voor de te bereiken positie. Dus telkens 1500 optellen bijvoorbeeld.


   stepper.moveto(1500);
   wait-for-button()
   stepper.moveto(3000);
   wait-for-button()
   stepper.moveto(4500);
   wait-for-button()
   stepper.moveto(6000);
   wait-for-button()
   stepper.moveto(7500);
   wait-for-button()
   stepper.moveto(9000);
enz

Is niet absoluut aansturen dan geen veel betere optie? Geen idee of AccelStepper dat kan, maar dat is niet de enige stepper lib.