つづき
今週からGR-LYCHEEコンテストのソフトウェアを製造しています。
GR-LYCHEEはメモリにも余裕があるため、メモリを量を意識しなくてもある程度のプログラムが書けるのがメリットです。
では、前回コーディングしたソースコードのコンパイルを行います。
コンパイルに通らなかったら、その部分を修正して行きますが、この作業を、デバッグ(虫つぶし)といいいます。
まずはコードがコンパイルが通る事を優先して、異常な部分を修正して行きます。
ソフトウェアは一文字でも間違っているとコンパイルが通らない事があります。
エラーが表示されたところを直して行きます。
エラーの内容は通常英語表示なので、代表的なエラーをここに上げておきます。
エラー例
Step2.ino:9:13: error: 'MAX_SERVO_NUM' was not declared in this scope
→ そんなの無い。
7行目が正しいコードですが、エラーを起こすために8行目は、
”MAX_SERVO_NUM” を ”MAX_SERVO_NU” に直しています。
するとそれを使う9行目の13文字目あたりでエラーを検出しています。
Step2.ino:8:1: error: 'Servo' does not name a type
→ そんなのない
6行目をコメントアウトしてみました。
すると8行目で Servo ライブラリを使用しようとしたところで、見つからないのでエラーとなります。
ライブラリを使用するときは、 #include <ライブラリ名.h> が必要になります。
Step2.ino:58:1: error: expected ',' or ';' before 'int'
Step2.ino: In function 'void setup()':
→ カンマかセミコロン抜けてない?
57行めの”;”が無かった場合のエラーです。
Step2.ino:149:13: error: a function-definition is not allowed here before '{' token
Step2.ino:172:1: error: expected '}' at end of input
Step2.ino:172:1: error: expected '}' at end of input
→ }抜けてない?
これは少し面倒なバグで、実際には144行目の ”}”をコメントアウトして起こしたエラーなのですが、 149行目や、172行でエラーが検出されています。つまりエラーの原因箇所とエラーの検出箇所が遠い場合もあり、デバッグが難しいので、”{”や”}”は注意が必要です。
なのでインデントやコメントを使って、対応が取れるようにしています。
{ // ここから処理1
{ // ここから処理2 インデントを付ける
} // ここまで処理2
} // ここまで処理1
最後に日本で良くあるバグです。
Step2.ino:143:1: error: universal character \u3000 is not valid in an identifier
143行めにバグなのですが、おかしく無いように見えますが実は、
noTone(SoundPin); の前に 全角のスペースが入っているのです。
日本語はコメントの中しか使えません。
まるで、ステルスバグですね。
他にも {}なでも全角と半角で間違いやすいので、注意しましょう。
どうしてもバグが見つからないときは、/* */ を使って、怪しそうな部分をコメントアウトして、切り分けて行きます。
つづく
次回はプログラムの動作確認を行います。
購入品情報