電子書籍の厳選無料作品が豊富!

c言語初心者です。

c言語の勉強で、ライントレーサーを作っています。

センサーは3つあります。

ライン上を走行、十字路で停止というところまではできました。

今度は一つ目の十字路を通過、2つ目の十字路で停止という動作をさせようと思っています。

十字路のカウントにはcountを使うということまでは分かりますが、書き方が分かりません。

もしセンサーが0x00(すべて黒=十字路)になったら、一つ目の十字路ではモーターを0x90(直進)に、二つ目の十字路ではモーターを0x00(停止)にする、というふうにしたいので

if(sensor==0x00)
{
一つ目はmotor=0x90;
二つ目はmotor=0x00;
}

となると思いますが、真ん中の部分のプログラムを教えてください。

どのような情報が必要なのか私には分からないので、もし足りない情報がありましたら言っていただければ補足します。

解答お願いします。

A 回答 (3件)

あー、これなら静的変数でなくても問題はありませんねぇ。



まぁ、それはさておいて「なぜ止まってしまうのか」ですが。
#1では「一度入ったら、交差点を抜けるまでは再度カウントしないようにガードをかける」と言いました。

何故そのような事をするのかというと、「一回交差点を検知したら、交差点を通過中はずっと『交差点である』という情報をセンサーは出し続ける」ので、一度だけ入ったつもりでも動いている間に何度も「交差点である」ということになってカウントアップが続いてしまう訳です。
この辺はフラグで制御を行うのが常道ですかね。
    • good
    • 1
この回答へのお礼

なるほど。。。

考え方は分かるんですけど、やっぱり書き方がさっぱり。

もうちょっと頑張ってみます!

回答ありがとうございました。

お礼日時:2011/06/28 21:43

#1は基本的なことしか書いていませんので、アレが理解できないということであれば「あなたには先にやるべき事がある」ということです。



静的変数とはどういうものか、どうやって使うのかさえ理解できれば少なくともカウンタをどう置けばいいかはわかるはずです。
コードで示すのは簡単ですが、まぁそういうものを自力で頑張るのも勉強のうち、ということで。
    • good
    • 0
この回答へのお礼

ありがとうございます。

言われた通り、自分で頑張ってみました。


#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のそもそもの書き方が違うのでしょうか?

お礼日時:2011/06/27 21:51

質問のコード部分のスコープから参照出来る位置に静的変数でカウンタを作り、交差点を検知するごとに+1すればいいでしょう。


ただし、その後交差点を抜けるまでの間はカウントしないようにガードしないといけません。
    • good
    • 0
この回答へのお礼

ごめんなさい、さっぱり分からないです。

解答していただいたのに申し訳ないのですが、実際のプログラムを書いていただかないと素人には意味不明なのです。

お礼日時:2011/06/27 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!