0

私はプロジェクトを作成しており、シリアルポートを使用してPCから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();
    }
  }
}   

私が抱えている問題は、ステッパー1を動かしてからステッパー2を動かそうとすると、arduinoをリセットしない限り動かないことです。

ありがとう!

4

1 に答える 1

0

徐々にデバッグする必要があると思います。まず、各モーターの位置を個別に制御できるかどうかを確認します。これをチェックする簡単な関数を書くことができます。一定のステップでモーターを交互に動かすだけです。両方のモーターが正常に動作している場合は、シリアル通信のデバッグに進むことができます。ただし、モーターが正常に動作しない場合は、接続などを確認してください (ハードウェアのデバッグ)。ステッパーモーターの初期化も確認してください。

これが正常に機能している場合は、arduino の PC から正しい応答を受信できるかどうかを確認できます。新しいキャラクターを受け取るたびに、おそらく別の 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();
    }
  }
}   

上記が正常に機能する場合は、変換の可能性があることがわかります。これらのすべての手順には時間がかかりますが、問題を正確に特定することができます.

于 2013-07-25T10:35:34.237 に答える