Смена направления вращения ШД с библиотекой CastomStepper

IgorU
Offline
Зарегистрирован: 03.12.2014

Перенес из "Общего" в нужную ветку.

Batonich пишет:
Нашел. Надо поменять 1 и 4 контакт местами.

Полная фигня, не лечит!!!!!

NeiroN пишет:
Вот универсальная: 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();
 
}
 
IgorU
Offline
Зарегистрирован: 03.12.2014

Вот чего добился(тестовый вариант): данный фрагмент кода работает, мотор крутит как надо, стартует в 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);
}stepper.run();}

Но вот загвоздка, как только добавляю код вывода на дисплей. Код дисплея работает, отображает все что нужно, а двигатель при старте перестает крутится! Такое впечатление что в 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();
}

Подскажите что делать, может разные потоки нужно организовывать? Библиотеки могут конфликтовать? С чем это может быть связано?