1

変更したスクリプトに問題があります。「Ping_Library_Example:9:error:expected unqualified-id before'if'」が表示され
ます。どこかに小さな構文エラーがあると確信しています。何かアイデアはありますか?ちなみに、元のスクリプトには「if」ではなく「voidloop」があります。これは、同じエラーでwhenを使用する場合にも発生する可能性があります。何か案は?

#include <Ping.h>

Ping ping = Ping(13,74,29);

void setup(){
  Serial.begin(115200);
}

if(digitalRead == HIGH){
  ping.fire();
  Serial.print("Microseconds: ");
  Serial.print(ping.microseconds());
  Serial.print(" | Inches ");
  Serial.print(ping.inches());
  Serial.print(" | Centimeters: ");
  Serial.print(ping.centimeters());
  Serial.println();
}
4

4 に答える 4

4

Arduinoプログラムloop()を実行するには関数が必要です。関数を条件に置き換えるだけでは機能しifません。ifブロックを関数内に配置してみてくださいloop()

さらに、digitalReadは関数であり、どのピンから読み取るかを指定する必要があります。たとえば、digitalRead(5)ピン5から読み取る場合。

次のようなものを試してください。

void loop() {
  if(digitalRead(5) == HIGH) {
    ping.fire();
    // insert other code here
  }
}

(5を読み取りたいピンに変更するか、その値を変数に割り当てて渡します)

于 2013-01-26T15:48:29.460 に答える
3

if 式を関数の外に書くことはできません。私はそれが次のようであるべきだと思います:

void loop() {
   if(digitalRead(5) == HIGH){ //checks pin 5
     ping.fire();
     Serial.print("Microseconds: ");
     Serial.print(ping.microseconds());
     Serial.print(" | Inches ");
     Serial.print(ping.inches());
     Serial.print(" | Centimeters: ");
     Serial.print(ping.centimeters());
     Serial.println();
   }
}

このコードはループし、digitalRead が HIGH かどうかをチェックし、そうであれば ping を実行します。それが役に立てば幸い :)

于 2013-01-26T15:44:49.823 に答える
1

この回答につまずいた人に役立つ可能性のある追加情報については、

私はちょうど同じ問題を抱えていましたが、私の問題は } が最後から誤って省略されていたことです。これにより、if ステートメントがどの関数の外側にもありました。単純なタイプミス。

于 2015-09-30T01:21:07.073 に答える