Bertjebuk
Electronica is mooi als het goed werkt
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
buckfast_beekeeper
Van Lambiek wordt goede geuze gemaakt.
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.
Bertjebuk
Electronica is mooi als het goed werkt
"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.
Ik ga het programma uitproberen .