#include <GyverStepper.h>
GStepper<STEPPER4WIRE> stepper(200, 2, 5);
void setup() {
pinMode( 8 ,OUTPUT); // ВАЖНО !!!!!
digitalWrite(8, LOW); // иначе не будет работать
stepper.setMaxSpeed(5000);
stepper.setRunMode(KEEP_SPEED);
stepper.setSpeed(2000);
}
void loop() {
stepper.tick();
}
const int StepX = 2;
const int DirX = 5;
void setup() {
pinMode(StepX,OUTPUT);
pinMode(DirX,OUTPUT);
pinMode( 8 ,OUTPUT);
digitalWrite(8, LOW);
}
void loop() {
digitalWrite(DirX, HIGH); // set direction, HIGH for clockwise, LOW for anticlockwise
for(int x = 0; x < 200; x++) { // loop for 200 steps
digitalWrite(StepX,HIGH);
delayMicroseconds(500);
digitalWrite(StepX,LOW);
delayMicroseconds(500);
}
delay(1000); // delay for 1 second
digitalWrite(DirX, LOW); // set direction, HIGH for clockwise, LOW for anticlockwise
for(int x = 0; x < 200; x++) { // loop for 200 steps
digitalWrite(StepX,HIGH);
delayMicroseconds(500);
digitalWrite(StepX,LOW);
delayMicroseconds(500);
}
#include "GyverStepper2.h"
class My {
public:
My(GStepper2<STEPPER2WIRE> stepper ){
_stepper = stepper;
}
private:
GStepper2<STEPPER2WIRE> _stepper;
};
эта фраза не имеет смысла. Попробуйте еще раз.Подскажите как передать в конструктор класса объект GStepper?
#include "GyverStepper2.h"
template <GS_driverType D>
class My : public GStepper2<D> {
public:
My(uint16_t steps) : GStepper2<D>(steps) {
//do something
}
private:
//GStepper2<STEPPER2WIRE> _stepper; это не надо
};
if ((stepper.pos % 400 == 0)) {
guide.reverse(1);
}
#include <Arduino.h>
#include "Debug.h"
#include "GyverStepper2.h"
#define dirPin 12
#define stepPin 11
#define enPin 10
void homing();
#define LIMSW_X 3
GStepper2<STEPPER2WIRE> stepper(2048, stepPin, dirPin, enPin);
void setup()
{
Serial.begin(9600);
pinMode(LIMSW_X, INPUT_PULLUP);
delay(1000);
DEBUGLN("setup");
homing();
}
void loop()
{
}
void homing()
{
stepper.enable();
DEBUGLN("start homing");
if (digitalRead(LIMSW_X))
DEBUGLN("start");
{ // если концевик X не нажат
stepper.setSpeed(-10); // ось Х, -10 шаг/сек
while (digitalRead(LIMSW_X))
{ // пока кнопка не нажата
stepper.tick(); // крутим
}
// кнопка нажалась - покидаем цикл
stepper.brake(); // тормозим, приехали
DEBUGLN("finish");
}
stepper.reset(); // сбрасываем координаты в 0
}
здесь тоже не едет 4 раза только 1 раз
Не в другую, а в целевую позицию 0 шагов. Всё правильно, пришёл в 0, в следующий раз снова в 0 и так до бесконечности, пока не закончится loop, а он не закончится.stepper.setTarget(0); // едем в другую сторону
Ну, очевидно, нужно не начинать программу заново в "автомате".как тогда остановить двигатель
Вот я же не знаю по какому событию вы желаете начинать движение, по прошествии какого-то промежутка времени, по нажатию кнопки, или ещё какому.что бы он потом начал движение
Я без понятия куда вы его вставляли, но while нужно вставлять где крутится мотор, и ждать, пока он не остановится, а это tick().пробывал так же while , выводил в порт циклы (видел для for (0,1,2,3))
while (stepper.tick()) {}
void loop() {
if (digitalRead(2) == 0) {
for (int i = 0; i < 4; i++) {
stepper.tick(); // мотор асинхронно крутится тут
if (stepper.ready()) {
dir = !dir; // разворачиваем
stepper.setTarget(dir * 400); // едем в другую сторону
}
}
}
//stepper.pause();
//stepper.resume();
}
Правильно, и не будет. Где ожидание пока (while) мотор в движении ( stepper.tick() )? В таком виде цикл for все 4 раза пролетает быстрее, чем мотор успевает сделать даже второй шаг.не едет он 4 раза