Зависает в каком состоянии то ? Останавливается сразу или доворачивает 45 градусов и больше ничего не делает ? выведите в сериал shagi и schet посмотреть последнее их состояние.
Доворачивает и останавливается, больше ни на что не реагирует.
Во время движения нажал вниз и остановилось. Но если дать пройти до конца то все работает нормально.
Serial:
Спойлер
Код:
16:29:34.052 -> shagi Up
16:29:34.052 -> 8
16:29:34.052 -> schet Up
16:29:34.052 -> 0
16:29:34.683 -> shagi Up
16:29:34.683 -> 8
16:29:34.683 -> schet Up
16:29:34.683 -> 1
16:29:35.302 -> shagi Up
16:29:35.302 -> 8
16:29:35.302 -> schet Up
16:29:35.302 -> 2
16:29:35.962 -> shagi Up
16:29:35.962 -> 8
16:29:35.962 -> schet Up
16:29:35.962 -> 3
Тоже самое пробовал, но через кнопку, все нормально работает, нажимаешь в момент вращения и начинает крутить в другую сторону.
В чем подвох не пойму.
Я новичок в этом, старайтесь пожалуйста объяснить простыми словами, что поправить.
Спойлер
Код:
#include <CustomStepper.h>
#include "GyverButton.h"
#define verh 0
#define niz 4 //Число шагов для положения
#define seredina 2
boolean stop = 0;
long schet = 0; //Счетчик шагов
long shagi = 0;
CustomStepper stepper(32, 33, 25, 26);
GButton butt1(17); // Кнопка
void setup() {
Serial.begin(9600);
stepper.setRPM(12);
stepper.setSPR(2048);
butt1.setTimeout(700);
butt1.setType(LOW_PULL);
butt1.setDirection(NORM_CLOSE); // NORM_OPEN - кнопка нормально-разомкнутая NORM_CLOSE - нормально-замкнутая
butt1.setTickMode(AUTO); //Выставляем опрос кнопок в режим АВТО
}
void loop() {
if (butt1.isSingle()){shagi = niz;} //одно нажатие
if (butt1.isDouble()){shagi = verh;} //два нажатия
if (butt1.isHolded()){shagi = schet; stop = 1;}
if (stepper.isDone() && schet < shagi){
Serial.println("Time1");
stepper.setDirection(CCW);
stepper.rotate(1);
schet++;
}
if (stepper.isDone() && schet > shagi){
Serial.println("Time2");
stepper.setDirection(CW);
stepper.rotate(1);
schet--;
}
if (stepper.isDone() && stop == 1){
Serial.println("Time3");
stepper.setDirection(STOP);
stepper.rotate();
stop = 0;
}
stepper.run();
}