首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何中止函数RunToPosition - AccelStepper / Arduino

如何中止函数RunToPosition - AccelStepper / Arduino
EN

Stack Overflow用户
提问于 2017-03-19 15:37:08
回答 1查看 1.8K关注 0票数 0

我编写了用串口控制步进电机的短测试代码(使用AccelStepper库)。该代码使用三个命令M-移动电机到定义位置,H-中止操作和P-检查当前电机的步进位置。每个赞扬都必须以"#“结尾。因此,当我写M500#时,意味着电机将开始运动,直到达到500。我的问题/问题是如何中止此操作?串口被阻塞,直到RunToPosiotion函数完成。

代码语言:javascript
复制
#include <AccelStepper.h>
#include <MultiStepper.h>

AccelStepper stepper = AccelStepper(AccelStepper::HALF4WIRE, 4, 5, 6, 7);
String MyString;
String Command;
int Value;


void setup() {
  Serial.begin(57600);
  stepper.setMaxSpeed(400);
  stepper.setAcceleration(600);
  stepper.setCurrentPosition(100);
  }

void serialEvent() {
    while (Serial.available()) {
        char inChar = (char)Serial.read();
        if (inChar == '#') {
            SerialCommand(MyString);
            MyString = "";
        }
        else {
            MyString += inChar;
        }
    }
}

void loop() {
    }

void SerialCommand(String ASCOM_Command) {
    Command = String(ASCOM_Command.charAt(0));
    String Txt_Value = ASCOM_Command.substring(1);
    Value = Txt_Value.toInt();

    /*Commands, an example: M500# - start motor to move until get  500 position 
    P - check actual focuser position
    M - Move to specific position called by client application
    H - Halt / Abort
    */
    switch (ASCOM_Command.charAt(0))    {

    case 'P':
        Serial.println(stepper.currentPosition()); 
        break;

    case 'M':
        stepper.moveTo(Value);
        stepper.runToPosition();
        break;
    case 'H':
        stepper.stop();
        Serial.println("H#");
        break;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-20 10:21:29

阅读accelstepper并遵循runtoPosition的提示:

代码语言:javascript
复制
    Dont use this in event loops, since it blocks. 

相反,请看一看run()

保持循环()快速,每次只调用run()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42888495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档