• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ライントレース 変数の使い方について)

ライントレースの変数の使い方について

このQ&Aのポイント
  • ライントレースで左右のカーブを曲がる際に変数を使って、「さっきは右に曲がったので次は右から曲がる」や「さっきは左に曲がったから左から曲がる」といったプログラムはどのようにつくったらいいのでしょうか?
  • 初心者なので変数をうまく使えなくて悩んでいます。修正点や加えた方がいい点、省略できる点はありますか?
  • プログラミングについてお聞きしたいです。ライントレースでの変数の使い方について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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 左;   } } あってるかどうかわかりませんが、例えば、こんな感じになると思います。 これだと、何をしているか、よくわかるのではないでしょうか。