デバッグし、アナログピンについていくつかの矛盾する宣言があった後、コンパイル後に次のエラーが発生しました。

32:0, 1: 31:12: error: expected unqualified-id before numeric constant 2:5: note: in expansion of macro "B1" 

これが何を意味するのか理解できません。ここにあるコードの何が問題になっていますか?

// don"t judge me if it"s too long and overcomplicated :P I"m still new xD int AA1 = 0; int B1 = 1; int C1 = 2; int D1 = 3; int AA2 = 4; int B2 = 5; int C2 = 6; int AA3 = 8; int B3 = 9; int C3 = 10; int D3 = 11; int B4 = 12; int C4 = 13; int sec = 0; int min1 = 0; int min2 = 0; int hour1 = 8; bool hour2 = 0; void setup() { pinMode(AA1, OUTPUT); pinMode(B1, OUTPUT); pinMode(C1, OUTPUT); pinMode(D1, OUTPUT); pinMode(AA2, OUTPUT); pinMode(B2, OUTPUT); pinMode(C2, OUTPUT); pinMode(AA3, OUTPUT); pinMode(B3, OUTPUT); pinMode(C3, OUTPUT); pinMode(D3, OUTPUT); pinMode(B4, OUTPUT); pinMode(C4, OUTPUT); } void loop() { OutputOn(); delay(1000); sec++; if(sec == 60) { sec = 0; min1++; if(min1 == 10) { min1 = 0; min2++; if(min2 == 6) { min2 = 0; hour1++; if(hour1 == 10) { hour1 = 0; hour2 = 1; } if(hour2 == 1, hour1 == 3) { hour1 = 1; hour2 = 0; } } } } } void OutputOn() { digitalWrite(B1, LOW); digitalWrite(C1, LOW); digitalWrite(D1, LOW); digitalWrite(A2, LOW); digitalWrite(B2, LOW); digitalWrite(C2, LOW); digitalWrite(A3, LOW); digitalWrite(B3, LOW); digitalWrite(C3, LOW); digitalWrite(D3, LOW); digitalWrite(B4, LOW); digitalWrite(C4, LOW); if(min1 == 1) { digitalWrite(AA1, HIGH); } if(min1 == 2) { digitalWrite(B1, HIGH); } if(min1 == 3) { digitalWrite(B1, HIGH); digitalWrite(AA1, HIGH); } if(min1 == 4) { digitalWrite(C1, HIGH); } if(min1 == 5) { digitalWrite(C1, HIGH); digitalWrite(AA1, HIGH); } if(min1 == 6) { digitalWrite(D1, HIGH); digitalWrite(B1, HIGH); } if(min1 == 7) { digitalWrite(D1, HIGH); digitalWrite(AA1, HIGH); digitalWrite(B1, HIGH); } if(min1 == 8) { digitalWrite(D1, HIGH); } if(min1 == 9) { digitalWrite(D1, HIGH); digitalWrite(AA1, HIGH); } if(min2 == 1) { digitalWrite(AA2, HIGH); } if(min2 == 2) { digitalWrite(B2, HIGH); } if(min2 == 3) { digitalWrite(B2, HIGH); digitalWrite(AA1, HIGH); } if(min2 == 4) { digitalWrite(C2, HIGH); } if(min2 == 5) { digitalWrite(C2, HIGH); digitalWrite(A2, HIGH); } if(min2 == 6) { digitalWrite(C2, HIGH); digitalWrite(B2, HIGH); } if(hour1 == 1) { digitalWrite(AA3, HIGH); } if(hour1 == 2) { digitalWrite(B3, HIGH); } if(hour1 == 3) { digitalWrite(B3, HIGH); digitalWrite(AA3, HIGH); } if(hour1 == 4) { digitalWrite(C3, HIGH); } if(hour1 == 5) { digitalWrite(C3, HIGH); digitalWrite(AA3, HIGH); } if(hour1 == 6) { digitalWrite(C3, HIGH); digitalWrite(B3, HIGH); } if(hour1 == 7) { digitalWrite(C3, HIGH); digitalWrite(AA3, HIGH); digitalWrite(B3, HIGH); } if(hour1 == 8) { digitalWrite(D3, HIGH); } if(hour1 == 9) { digitalWrite(D3, HIGH); digitalWrite(C3, HIGH); } if(hour2 == 1) { digitalWrite(B4, HIGH); digitalWrite(C4, HIGH); } } 

これは、4つの7セグメントデコーダーに接続され、4つの7セグメントLEDディスプレイに接続されたクロックのコードであると想定されています(十分に明白でない場合)。

コメント

  • 一般に、Cで書く場合、「マクロ」は、#defineに関連する問題があることを示す大きなヒントになります。 。あなたが書いたものではないことを言う奇妙なエラー:#defineに関連する問題。

回答

運が悪い。 Arduino内に「binary.h」というファイルがあり、「B1」という定義が含まれています。つまり、変数として「B1」を使用することはできません。私の意見では、そのファイル「binary.h」は完全に不要です。

設定で、コンパイラの追加出力をオンにし、行番号をオンにすることができます。コンパイラーは何が悪いのかを教えてくれますが、コンパイラーがそれをどのように行うかを知っている必要があります。最初のコンパイラエラーが最も重要です。

… / hardware / arduino / avr / cores / arduino / binary.h:31:12:エラー:数値の前にunqualified-idが必要です定数#defineB1 1 “は、コンパイラがファイル” binary.h “を読み取っていて、31行目で、理解できない何かに気づき、” B1 “と関係があることを意味します。

コメント

  • では、B1を使用する必要はありませんか?
  • 正解です。 0 'と1 'の先頭のBは、バイナリ定数に使用されます: arduino.cc/en/Reference/IntegerConstants これはピン番号なので、変数" const B1Pin = 1; または" const theyToldMeAtStackExchangeNotToCallThisB1 = 1; "
  • I ment:" const int B1Pin = 1; "。申し訳ありませんが、' int 'を忘れてしまいました。 ' const 'キーワードは不要であり、定数であり、変更されないことをコンパイラーに通知します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です