0

Simple-H HV Motor Shield と H ブリッジ接続を使用して単一の DC モーターを制御しようとしています。シリアル モニタを使用して速度と方向の両方を制御する必要があります (たとえば、「f 220」は速度 220 で進むことを意味します)。ここに私が持っているコードがあります:

M1 はモーターを前進させ、M2 はモーターを後退させます。

ここにエラーがあります:「HardwareSerial::print()」の呼び出しに一致する関数がありません

これがこれをコーディングする正しい方法であるかどうかはわかりません。私はArduinoのコーディングがかなり新しいので、これをプログラミングするのを手伝ってほしいです。

const int PWM1 = 2;  //PA - PWM A (M1)
const int PWM2 = 3;  //PB - PWM B (M2)
const int MotorEnable = 4;  //EA - Enable A
const int TestLED = 13;  //LED that tests whether going forward or back. LED lights up = forward, //non-lit = reverse

void setup() {
  pinMode(PWM1, OUTPUT);
  pinMode(PWM2, OUTPUT);

  Serial.begin(9600);
}
void loop() {

   int VariableMove = Serial.print(); // *** ERROR is here! ***
   int speed = Serial.parseInt();

  if (Serial.available() > 0) {
      if (VariableMove = "f" && speed >= 0 && speed <= 255) {
        digitalWrite(MotorEnable, HIGH);
        digitalWrite(PWM1, HIGH);
        digitalWrite(PWM2, LOW);
        Serial.println("Going Forward");
        analogWrite(PWM1, speed);
        }
     if (VariableMove = "r" && speed >= 0 && speed <= 255)  {
        digitalWrite(MotorEnable, HIGH); 
        digitalWrite(PWM1, LOW);
        digitalWrite(PWM2, HIGH); 
        Serial.println("Coming Back");
        analogWrite(PWM2, speed);
       }
       }
  }
4

2 に答える 2

4

あなたが言う行はエラーを投げています:

 int VariableMove = Serial.print(); // *** ERROR is here! ***

その行が何を期待しているのかは不明ですが、2 つの問題があります。

  1. Serial.print()引数が必要です: 出力するデータです。エラーメッセージが示すように、引数なしでそのメソッドを呼び出すと、エラーが発生します。no matching function for call to 'HardwareSerial::print()'

  2. 使用法エラーよりもコーディング エラーが少ない: Serial.print()longは、文字列 "f" などの場合、テストしているコードの後で書き込まれたバイト数を表す を返しますSerial.read()。着信データの読み取り。

最後にこの行 if (VariableMove = "f"

1 つの=is割り当て等価性をテストするには、次のように2 つを使用==します。

if (VariableMove == "f"これはよくある間違いです。

Serial libのドキュメントから:

戻り値

size_t (long): print() は書き込まれたバイト数を返しますが、その数の読み取りはオプションです

于 2014-06-11T04:58:58.710 に答える
-2

以下に更新しました。

Serial.print()「書き込まれたバイト数を返す」関数ですが、その関数に入力がないため、コンパイル時エラーが発生します。

const int rightCW = 6, leftCW = 11, rightCCW = 5, leftCCW = 10;

void setup()
{
  Serial.begin(9600);
  initMotors();

}

void loop()
{
  delay(10);
  analogWrite(rightCW,255);     
}

void initMotors()
{
  //initialize motors
  pinMode(rightCW, OUTPUT);
  pinMode(leftCW, OUTPUT);
  pinMode(rightCCW, OUTPUT);
  pinMode(leftCCW, OUTPUT);
}

モーターを正しく配線したと仮定すると、右、左の CW および CCW (時計回りと反時計回り) のピンを、制御ピンが何であれ編集できます。このプログラムは、1 つのモーターが動作するかどうかをテストするだけです。

H ブリッジの図は、次の場合に使用します。http://9m.no /쵉쀨 コーナーは電源レールに接続し、両側の内側の 2 つはグランドに接続し、1A、2A は Arduino の制御ピンに接続し、1Y、2Y に接続します。モーターの2本のワイヤーに行きます。他のモーターにも同じことが当てはまります。

更新(以下のコメントを参照):

あなたは次のようなものが欲しいでしょう

String input = "";
String result = "";
while (Serial.available() > 0)
{
  char temp = Serial.read();
  if (temp == '\n')
  {
    result = input;
    input = "";
    break; 
  }
  else
  {
    input += temp; 
  }
}

Serial.read() は、一度に 1 バイトずつ読み取る関数です。

于 2014-06-11T00:52:59.687 に答える