- ベストアンサー
C言語でライントレーサーのカウント方法
- C言語初心者の方がライントレーサーのカウント方法について質問されています。ライントレーサーには3つのセンサーがあり、ライン上を走行して十字路で停止する動作を実現したいとのことです。
- 一つ目の十字路ではモーターを直進させ、二つ目の十字路ではモーターを停止させたいとのことです。センサーが0x00(すべて黒=十字路)になった場合に上記の動作を行いたいとのことです。
- 真ん中の部分のプログラムを教えてほしいとのことです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あー、これなら静的変数でなくても問題はありませんねぇ。 まぁ、それはさておいて「なぜ止まってしまうのか」ですが。 #1では「一度入ったら、交差点を抜けるまでは再度カウントしないようにガードをかける」と言いました。 何故そのような事をするのかというと、「一回交差点を検知したら、交差点を通過中はずっと『交差点である』という情報をセンサーは出し続ける」ので、一度だけ入ったつもりでも動いている間に何度も「交差点である」ということになってカウントアップが続いてしまう訳です。 この辺はフラグで制御を行うのが常道ですかね。
その他の回答 (2)
- D-Matsu
- ベストアンサー率45% (1080/2394)
#1は基本的なことしか書いていませんので、アレが理解できないということであれば「あなたには先にやるべき事がある」ということです。 静的変数とはどういうものか、どうやって使うのかさえ理解できれば少なくともカウンタをどう置けばいいかはわかるはずです。 コードで示すのは簡単ですが、まぁそういうものを自力で頑張るのも勉強のうち、ということで。
お礼
ありがとうございます。 言われた通り、自分で頑張ってみました。 #include <pic.h> __CONFIG(HS&WDTDIS&PWRTEN&UNPROTECT); void main(void) { int count; int sensor,motor; TRISA=0x07; TRISB=0x00; while(1) { count=0 sensor=PORTA&0x07; motor=0x00; if(sensor==0x05) { motor=0x90; } if(sensor==0x01||sensor==0x03) { motor=0x10; } if(sensor==0x04||sensor==0x06) { motor=0x80; } if(sensor==0x00) { count=count+1; if(count<2); { motor=0x90; } if(count>=2); { motor=0x00; } } PORTB=motor; } } ネットで調べてここまではできました。 コンパイルもエラーなしに無事通ったのですが、実際にPICマイコンに書き込んで動作させると、一つ目の十字路で止まってしまいました。 今はその理由が分からず、戸惑っています。 countが2未満のときはmotor=0x90(直進) countが2以上のときはmotor=0x00(停止) なのであっていると思ったのですが、、、。 countのそもそもの書き方が違うのでしょうか?
- D-Matsu
- ベストアンサー率45% (1080/2394)
質問のコード部分のスコープから参照出来る位置に静的変数でカウンタを作り、交差点を検知するごとに+1すればいいでしょう。 ただし、その後交差点を抜けるまでの間はカウントしないようにガードしないといけません。
お礼
ごめんなさい、さっぱり分からないです。 解答していただいたのに申し訳ないのですが、実際のプログラムを書いていただかないと素人には意味不明なのです。
お礼
なるほど。。。 考え方は分かるんですけど、やっぱり書き方がさっぱり。 もうちょっと頑張ってみます! 回答ありがとうございました。