如何中止函数RunToPosition-AccelStepper/Arduino
我已经准备了简短的测试代码,通过串口控制步进电机(使用AccelStepper库)。代码使用三个命令M-将电机移动到定义位置,H-中止操作,P-检查当前电机步进位置。每个赞扬都必须以“#”结尾。所以当我写M500时,意味着电机将开始移动,直到达到位置500我的问题是如何中止此操作???串行端口被阻止,直到RunToPosiotion函数完成如何中止函数RunToPosition-AccelStepper/Arduino,arduino,Arduino,我已经准备了简短的测试代码,通过串口控制步进电机(使用AccelStepper库)。代码使用三个命令M-将电机移动到定义位置,H-中止操作,P-检查当前电机步进位置。每个赞扬都必须以“#”结尾。所以当我写M500时,意味着电机将开始移动,直到达到位置500我的问题是如何中止此操作???串行端口被阻止,直到RunToPosiotion函数完成 #include <AccelStepper.h> #include <MultiStepper.h> AccelStepper
#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;
}
}
#包括
#包括
AccelStepper stepper=AccelStepper(AccelStepper::HALF4WIRE,4,5,6,7);
字符串MyString;
字符串命令;
int值;
无效设置(){
序列号。开始(57600);
步进电机。设定最大速度(400);
步进电机设定加速度(600);
步进电机设置电流位置(100);
}
void serialEvent(){
while(Serial.available()){
char inChar=(char)Serial.read();
如果(英寸='#'){
SerialCommand(MyString);
MyString=“”;
}
否则{
MyString+=英寸;
}
}
}
void循环(){
}
void SerialCommand(字符串ASCOM_命令){
Command=String(ASCOM_Command.charAt(0));
字符串Txt_值=ASCOM_命令。子字符串(1);
Value=Txt_Value.toInt();
/*命令,例如:M500#-启动电机移动,直到达到500位置
P-检查实际聚焦位置
M-移动到客户端应用程序调用的特定位置
H-停止/中止
*/
开关(ASCOM_命令字符(0)){
案例“P”:
Serial.println(stepper.currentPosition());
打破
案例“M”:
步进器。移动到(值);
步进器。运行位置();
打破
案例“H”:
步进器。停止();
Serial.println(“H#”);
打破
}
}
阅读accelstepper文档并按照runtoPosition提示操作:
Dont use this in event loops, since it blocks.
请查看run()
:
保持loop()快速,每次只需调用run()