我正在制作一个项目,我使用串口从我的电脑上向arduino发送字符串,arduino读取它们,并根据字符串移动一个或另一个电机,这是代码:
#include <AccelStepper.h>
#include <AFMotor.h>
AF_Stepper motor1(200, 1);
AF_Stepper motor2(200, 2);
String steps= "";
void forwardstep1() {
motor1.onestep(FORWARD, SINGLE);
}
void backwardstep1() {
motor1.onestep(BACKWARD, SINGLE);
}
void forwardstep2() {
motor2.onestep(FORWARD, SINGLE);
}
void backwardstep2() {
motor2.onestep(BACKWARD, SINGLE);
}
AccelStepper stepper1(forwardstep1, backwardstep1);
AccelStepper stepper2(forwardstep2, backwardstep2);
void setup() {
Serial.begin(9600);
Serial.println("Stepper program!");
stepper1.setMaxSpeed(200.0);
stepper2.setMaxSpeed(200.0);
stepper1.setAcceleration(100.0);
stepper2.setAcceleration(100.0);
}
void loop() {
}
void serialEvent() {
while(Serial.available()) {
int inChar = Serial.read();
Serial.print("Echo:");
Serial.write(inChar);
if (isDigit(inChar)) {
steps += (char)inChar;
}
if (inChar == 'u') {
Serial.print("Up:" + steps);
Serial.println();
long POSITION = stepper1.currentPosition() + steps.toInt();
stepper1.runToNewPosition(POSITION);
steps = "";
Serial.println();
}
if (inChar == 'U') {
Serial.print("Up:" + steps);
Serial.println();
long POSITION = stepper2.currentPosition() + steps.toInt();
stepper2.runToNewPosition(POSITION);
steps = "";
Serial.println();
}
}
}
我遇到的问题是当我移动stepper1然后尝试移动stepper2时它不再移动,除非我重置arduino。
谢谢!
答案 0 :(得分:0)
我认为你需要逐步调试它。首先检查您是否能够独立控制每个电机的位置。您可以编写一个简单的函数来检查它。只需按固定步骤交替移动电机即可。如果两个电机都工作正常,那么您可以继续调试串行通信。但是,如果电机不能正常工作,请检查连接等(硬件调试)。还要检查步进电机的初始化。
如果这个工作正常,那么你可以检查一下你是否能够从你的电脑上获得arduino的正确答案。每当你收到新角色时,可能会点亮不同的LED。通过这种方式,您可以确认电机和串行通信都可以正常工作。
此外,因为您从串口接收电机的位置。我建议你检查一下你是否正确接受这个职位。也许你应该首先尝试通过硬编码程序中的固定步骤,看看当你收到'u'和'U'时它是否有效。
void serialEvent() {
static int fixed_step_1;
static int fixed_step_2;
while(Serial.available()) {
int inChar = Serial.read();
Serial.print("Echo:");
Serial.write(inChar);
if (inChar == 'u') {
Serial.print("Up:");
long POSITION = stepper1.currentPosition() + fixed_steps_1;
stepper1.runToNewPosition(POSITION);
fixed_steps_1++;
Serial.println();
}
if (inChar == 'U') {
long POSITION = stepper2.currentPosition() + fixed_steps_2;
stepper2.runToNewPosition(POSITION);
fixed_steps_2++;
Serial.println();
}
}
}
如果上述工作正常,那么你知道它可以转换。虽然所有这些步骤都需要时间,但你可能会指出这个问题。