中野島ロボット

小さなロボットの自作記事を書いています。

週刊中ロボ27 GR-LYCHEE ソフトウェア製造(その3)

つづき

今週からGR-LYCHEEコンテストのソフトウェアを製造しています。

 

f:id:nakarobo:20181019072554j:plain

 

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文字目あたりでエラーを検出しています。

f:id:nakarobo:20181021094441p:plain

 
Step2.ino:8:1: error: 'Servo' does not name a type
→ そんなのない
6行目をコメントアウトしてみました。
すると8行目で Servo ライブラリを使用しようとしたところで、見つからないのでエラーとなります。
ライブラリを使用するときは、 #include <ライブラリ名.h> が必要になります。
 

f:id:nakarobo:20181021100204p:plain

 

Step2.ino:58:1: error: expected ',' or ';' before 'int'
Step2.ino: In function 'void setup()':

→ カンマかセミコロン抜けてない?

57行めの”;”が無かった場合のエラーです。

f:id:nakarobo:20181021100744p:plain

 

Step2.ino:149:13: error: a function-definition is not allowed here before '{' token
Step2.ino:172:1: error: expected '}' at end of input
→  }抜けてない?
これは少し面倒なバグで、実際には144行目の ”}”をコメントアウトして起こしたエラーなのですが、 149行目や、172行でエラーが検出されています。つまりエラーの原因箇所とエラーの検出箇所が遠い場合もあり、デバッグが難しいので、”{”や”}”は注意が必要です。
なのでインデントやコメントを使って、対応が取れるようにしています。
{ // ここから処理1
 { // ここから処理2 インデントを付ける
 } // ここまで処理2
} // ここまで処理1
 

f:id:nakarobo:20181021101224p:plain

 
最後に日本で良くあるバグです。
Step2.ino:143:1: error: universal character \u3000 is not valid in an identifier

f:id:nakarobo:20181021102333p:plain

143行めにバグなのですが、おかしく無いように見えますが実は、

noTone(SoundPin); の前に 全角のスペースが入っているのです。

日本語はコメントの中しか使えません。

まるで、ステルスバグですね。

他にも {}なでも全角と半角で間違いやすいので、注意しましょう。

 

どうしてもバグが見つからないときは、/* */ を使って、怪しそうな部分をコメントアウトして、切り分けて行きます。

 

つづく

次回はプログラムの動作確認を行います。

 

購入品情報