0

我必须停止步进电机一定次数(一整圈),并以延迟作为停止参数。假设我的要求是停止电机 20 次,这样我的延迟值应该均匀分布在这个数字之间(20 )完成一个旋转。我为这些停止(20)使用了一个for循环,但我得到了超过20个。我的arduino代码如下所示,其中8000是一圈的步数:

    #include <Stepper.h>

    const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
    // for your motor

    // initialize the stepper library on pins 8 through 11:
    Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

    void setup() {
    // set the speed at 60 rpm:
    myStepper.setSpeed(60);
    // initialize the serial port:
    Serial.begin(9600);
    }

   // step one revolution  in one direction:
   void loop() {
   int noi=20;// set the no of images here
   for(int i=0;i<=noi;i++){
    delay(8000/noi);
    }
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

    }
4

1 回答 1

1

您的问题仍然令人困惑,但比以前更清楚。

看起来你有一个驱动转盘的步进电机。电机转一圈需要200步,但转盘转一圈需要8000步。

从某种意义上说,重要的是数字 8000。要让表格暂停,您需要将 8000 分成相等的部分,就像您尝试过的那样。但是你放错了一个}.

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(8000/noi);
    } <<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

} 

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(enough_delay_to_take_image);  // or trigger image here?
        Serial.println("clockwise");
        myStepper.step(8000/noi);
    }   
} 

唯一stepsPerRevolution = 200重要的地方是计算运动的速度,以及myStepper.setSpeed(60);. 你真的希望桌子移动得那么快吗?这可能会导致物体晃动太多。

      myStepper.setSpeed(1);

将导致图像之间的移动需要 3 秒。如果速度太慢,

      myStepper.setSpeed(3);

将导致图像之间的移动需要 1 秒。

于 2014-12-22T17:42:10.097 回答