- ベストアンサー
ライントレースの変数の使い方について
- ライントレースで左右のカーブを曲がる際に変数を使って、「さっきは右に曲がったので次は右から曲がる」や「さっきは左に曲がったから左から曲がる」といったプログラムはどのようにつくったらいいのでしょうか?
- 初心者なので変数をうまく使えなくて悩んでいます。修正点や加えた方がいい点、省略できる点はありますか?
- プログラミングについてお聞きしたいです。ライントレースでの変数の使い方について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
○コメントが少ない 何が目的で、どんな考えでこう書いてあるのか、よくわかりません。 よくわからないので、改善点の提案もできません。 例えば if(GetSensor(CH_3) > kuro){ ですが。 kuro と判定してるので、黒かどうかを判定していることは予想できます。 ですが、この判定は 黒のときTrueなのか、黒でないときTrueなのか、どちらの意味かがわかりません。 ○同じ処理を何度も書いている 「同じことを3度書いたら、マクロか関数にしろ」という格言があります。 例えば、何度も出てくる GetSensor(CH_3) > kuro)ですが、この判定をマクロや関数にして if ( isBlack() ) (もしかしたらはisWhite?) 等と書けば、次のメリットがあります。 ・文字が減らせる。 ・意味がわかる。→コメント代りになる さらに抽象的にして onLine() (線上にいる) 等とすると、何を意味するかがはっきりする ・判定方法が変わっても、一箇所直すだけで全体に反映させることができる 例えば、 精度向上のためにセンサーを増やして、複合的に判定させようとします。 「CH_3のセンサーが>kuro かつ CH_4のセンサーが<kuro」になったとして現状どこを変更すればいいか、わかりますか? ○main関数に全部の処理を書く mainプログラムには、全体の流れだけを書くようにします。 int main(){ while(1) { // メインループ 動作スイッチ待ち(); if ( 交差点 ) { 前回曲った方向記録 = 曲がる(前回曲った方向記録) ; } else { 直進する(); } } } // さっき曲がった方向を指定→実際に曲った方向を返す関数 左右記録型 曲がる(さっき曲がった方向) { if ( さっき曲がった方向=左 ) { 左に曲がる(); return 左; } else { 右に曲がる(); return 左; } } あってるかどうかわかりませんが、例えば、こんな感じになると思います。 これだと、何をしているか、よくわかるのではないでしょうか。