Приветствую откликнувшихся, собираю станочек чпу, шаговик нема 17 , на одной оси с ним инкрементальный энкодер , пытаюсь заставить двигаться до заданной точки т обратно, но визуально вижу что на место каретка не встаёт , думаю ошибка в обработке энкодера, но не могу найти второй день, подскажите что не правильно обрабатываю ?
C++:
#include <GyverStepper2.h>
#include <GyverEncoder.h>
int16_t stepx = 0; // переменная хранения шагов энкодера оси X
#define CLKx 7 // пин A подключения энкодера оси X 600*31*3*4 = 223200 шагов = 360 градусов / 620 шага = 1 градус /1 деление 1 градус 15 минут градуса или 775 шагов энкодера
#define DTx 8 // пин B подключения энкодера оси X
#define SWx 25 // пин подключения кнопки старт
Encoder encx(CLKx, DTx, SWx);
GStepper2< STEPPER2WIRE> stepperX(200, 9, 10, 2);
void setup() {
Serial.begin(115200);
encx.setType(TYPE2);
}
void loop() {
if (Serial.available() > 0) {
char incoming = Serial.read();
switch (incoming) {
case 'j':
for(int i = 0; i < 10; i++){
Serial.print("X 1 ");
Serial.println(stepx);
while(stepx != -775){
stepperX.tick();
stepperX.setSpeed(-500);
encx.tick();
if (encx.isTurn()) {
if ( encx.isRight()) stepx--;
if ( encx.isLeft()) stepx++;
}
}
stepperX.stop();
Serial.print("X 2 ");
Serial.println(stepx);
while(stepx != 0){
stepperX.tick();
stepperX.setSpeed(500);
encx.tick();
if (encx.isTurn()) {
if ( encx.isRight()) stepx--;
if ( encx.isLeft()) stepx++;
}
//Serial.println(stepy);
}
stepperX.stop();
Serial.print("X 3 ");
Serial.println(stepx);
}
break;
}
}
}