Смена направления вращения ШД с библиотекой CastomStepper
- Войдите на сайт для отправки комментариев
Пнд, 21/11/2016 - 19:32
Перенес из "Общего" в нужную ветку.
Нашел. Надо поменять 1 и 4 контакт местами.
Полная фигня, не лечит!!!!!
Вот универсальная: http://playground.arduino.cc/Main/CustomStepper
Юзал эту библиотеку, так же не срабатывает функция setDirection(), все равно крутится в одну сторону, не происходит смены вращения. В строке 13 установилось вращение против часовой стрелки, так и до конца цикла...
Нужно повернуть на угол, остановить, сменить направление и крутить дальше. Помогите разобраться, как заставить мотор крутится в противоположную сторону? Вот код для теста:
#include <CustomStepper.h>
CustomStepper stepper(15,14,16,10, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
int myDegress[]={1,2,1,2,1};
void setup()
{
}
void loop()
{
....
stepper.setDirection(CCW);
stepper.rotate(myDegress[0]);
delay(1000);
stepper.setDirection(CW);
stepper.rotate(myDegress[1]);
delay(1000);
stepper.setDirection(CCW);
stepper.rotate(myDegress[2]);
delay(1000);
stepper.setDirection(CW);
stepper.rotate(myDegress[3]);
delay(1000);
stepper.setDirection(CCW);
stepper.rotate(myDegress[4]);
}
....
stepper.run();
}
Вот чего добился(тестовый вариант): данный фрагмент кода работает, мотор крутит как надо, стартует в SETUP, останавливаю и задаю вращение в разные стороны в LOOP.
void setup { if (stepper.isDone() && rotateend == false) { stepper.rotate();} //Крутим, пока не упремся в оптический датчик остановки } void loop() { if (stepper.isDone()==false && digitalRead(9)==HIGH){ //Если сработал оптодатчик stepper.setDirection(STOP); //Останавливаем мотор rotateend = true; } if (digitalRead(7)==HIGH){ //поворот по часовой { stepper.setDirection(CW); stepper.rotateDegrees(90); } if (digitalRead(5)==HIGH){ //поворот против часовой { stepper.setDirection(CCW); stepper.rotateDegrees(160);Но вот загвоздка, как только добавляю код вывода на дисплей. Код дисплея работает, отображает все что нужно, а двигатель при старте перестает крутится! Такое впечатление что в SETUP не отрабатывает... Такое же поведение при наличии в LOOP функции delay(). На индикаторе драйвера ULN2003 горит светодиод("А"), шагов нет! Библиотеки - CustomStepper и TM1637Display.
void ShowDisplay() { displayLed.showNumberDec(deg, false, 4, 0); //выводим на индикатор if (D.value >= 24 || D.value <= 1 ) { if (pr == 1) { displayLed.setSegments(data,1,0); pr = 0;} else {pr = 1;} } } void loop() { ShowDisplay(); if (stepper.isDone()==false && digitalRead(9)==HIGH){ //Если сработал оптодатчик stepper.setDirection(STOP); //Останавливаем мотор rotateend = true; } if (digitalRead(7)==HIGH){ //поворот по часовой { stepper.setDirection(CW); stepper.rotateDegrees(90); } if (digitalRead(5)==HIGH){ //поворот против часовой { stepper.setDirection(CCW); stepper.rotateDegrees(160); } stepper.run(); }Подскажите что делать, может разные потоки нужно организовывать? Библиотеки могут конфликтовать? С чем это может быть связано?