2016-07-12 3 views
0

Мне нравится делать шаговый двигатель в одном направлении, пока датчик не выдаст сигнал HIGH, а затем он должен остановиться.Кнопка остановки электродвигателя Accelstepper и перейдите к следующему положению

Я понял эту часть, но теперь я хочу шаговый продолжить поворот с задержкой на несколько секунд с сигналом датчика еще ВЫСОКОЙ

Может кто-нибудь мне помочь?

#include <AccelStepper.h> 
#define HALFSTEP 8 

// Motor pin definitions 
#define motorPin1 3  // IN1 on the ULN2003 driver 1 
#define motorPin2 4  // IN2 on the ULN2003 driver 1 
#define motorPin3 5  // IN3 on the ULN2003 driver 1 
#define motorPin4 6  // IN4 on the ULN2003 driver 1 

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48 
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); 



void setup() { 

    Serial.begin(9600); 
    pinMode(7,INPUT); 

    stepper1.setMaxSpeed(600); 
    stepper1.setAcceleration(200); 
    stepper1.setSpeed(100); 
} 

void loop(){ 

    if(digitalRead(7) == 1) 
    { 
     stepper1.move(640000); 
     stepper1.run(); 
    } 

    if(digitalRead(7) == 0) 
    { 
     stepper1.setCurrentPosition(0); 
     stepper1.stop(); 

     //from here it does not work, the stepper is not going to move 
     delay(2000); 

     stepper1.move(640000); 
     stepper1.run();  
    } 
} 
+0

1) Это явно не C! Ардуино не C! 2) Это не консалтинговое обслуживание! См. [Ask]. – Olaf

+0

Я не добавлял C. – David

+0

Хм, хорошо, извините, это был чрезмерно восторженный редактор. Но 2) стоит. – Olaf

ответ

0

Вам необходимо подумать о своей программе как о петле, которая работает 1000 раз в сек. так каждый раз, когда он достигает этого раздела

if(digitalRead(7) == 0) 
    { 
     stepper1.setCurrentPosition(0); 
     stepper1.stop(); 

     //from here it does not work, the stepper is not going to move 
     delay(2000); 

     stepper1.move(640000); 
     stepper1.run();  
    } 

он остановится на 2 сек. затем переместите шагомер на один шаг, а затем он начнется снова. Это связано с тем, что функция .run() перемещает шагомер только один шаг каждый раз, когда он вызывается.

Я хотел бы сделать что-то вроде этого:

На вершине определить новую переменную, чтобы проверить, если вход был низким при последнем цикле.

bool inputWasLow = true;

Затем в цикле попробовать этот

if(digitalRead(7) == 1) 
{ 
    inputWasLow = true; 
    stepper1.runSpeed(); 
} 

if(digitalRead(7) == 0) 
{ 
    if(inputWasLow) 
    { 
     inputWasLow = false; 
     stepper1.stop(); 
     delay(2000); 
    } 
    stepper1.runSpeed(); 
} 

Надеется, что это поможет.

+0

Отлично! что отлично работало, спасибо вам большое! : D – David

+0

Рад, что я могу помочь. Было бы здорово, если бы вы отметили мой пост, как ответили! – XerXeX

Смежные вопросы