Good day!!! There are those who want to understand the code purely according to my assumptions, the code is not ideal, therefore, in order to turn the steps correctly, you need small speeds in the code settings. but I twisted them to the full) as a result, I got a bunch of pulses at the output. spontaneously because the stepper should not walk more than the encoder sent a signal.
#include <Arduino.h> #include <AccelStepper.h> #define encoder_pin_A 2 #define encoder_pin_B 3 int encoder_pin_A_last = LOW; int encoder_pos = 0; int n = LOW; #define stepper_pin_step 13 #define stepper_pin_dir 14 //useless // Enc have 24 steps per revolution // The motor have 800 steps per revolution // Want: 1 encoder rev = 1 stepper rev // 800 / 24 = 33.3333333333... float steps_per_pulse = 1.2; AccelStepper stepper(AccelStepper::DRIVER, stepper_pin_step, stepper_pin_dir); void setup(){ stepper.setMaxSpeed(25000); stepper.setAcceleration(25000); pinMode(encoder_pin_A, INPUT_PULLUP); pinMode(encoder_pin_B, INPUT_PULLUP); } void loop(){ // read encoder n = digitalRead(encoder_pin_A); if ((encoder_pin_A_last == LOW) && (n == HIGH)) { if (digitalRead(encoder_pin_B) == LOW) { encoder_pos--; } else { encoder_pos++; } // set stepper to the new calculated position stepper.moveTo((long) round(20000*steps_per_pulse)); } encoder_pin_A_last = n; stepper.runToPosition(); }