合計 昨日 今日

状態カウント

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: C素人
[URL]
Date: 2017年4月18日(火) 15:06
No: 1
(OFFLINE)

 状態カウント

ラジコンカーを製作しています。
送信側から送られてくる進行方向を表す信号「Dir」に応じて、後退・前進・停止を行います。

このラジコンカーにオプション機能を追加したいと考えています。
ラジコンカーの底面に白黒を検知できるセンサを配置し、
黒い場所を5回通過したら、送信側にコマンドを送る。という動作を行いたいです。

センサの状態をsという変数で監視して、
s=PORTA &0x06;

if(s==0x00)
{
count++;
}
と考えましたが、これだと黒い場所を通過している間、カウント値が上がり続けてしまいます。

センサの状態が前の状態か変化したときにだけ、カウントしたいのですが、
↓のコードにどのように追加すれば良いのか分かりません。


コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(Dir)         //進行方向に応じて後退・前進・停止
{
    case 0:
        M1Rev();        //後退
        M2Rev();
        break;
    case 1:
        M1Feed();       //前進
        M2Feed();
        break;
    case 2:
        M1Stop();       //停止制御
        M2Stop();
        break;
    default:    break;
        }

Name: みけCAT
[URL]
伝説なるハッカー(650,273 ポイント)
Date: 2017年4月19日(水) 00:55
No: 2
(OFFLINE)

 Re: 状態カウント

C素人 さんが書きました:センサの状態をsという変数で監視して、
s=PORTA &0x06;

if(s==0x00)
{
count++;
}
と考えましたが、これだと黒い場所を通過している間、カウント値が上がり続けてしまいます。

センサの状態が前の状態か変化したときにだけ、カウントしたいのですが、

素直にセンサの状態が前の状態か(原文ママ:「前の状態から」と解釈する)変化したときにだけ、カウントするプログラムを書けばいい、というわけではないのですか?
例えばこんな感じ?
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
/* ループの外 */
unsigned char prev_s = 0;
 
/* ループの中 */
s = PORTA & 0x06;
 
if(s==0x00 && s != prev_s)
{
    count++;
}
prev_s = s;


C素人 さんが書きました:↓のコードにどのように追加すれば良いのか分かりません。

sとの関係が全くわからないので、私にもわかりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: C素人
[URL]
Date: 2017年4月25日(火) 09:40
No: 3
(OFFLINE)

 Re: 状態カウント

みけCAT様

確認が遅れてすみません。
回答ありがとうございました。

確認してみたところ、意図した動作を行うことができました。



コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
unsigned char prev_s = 0;
 
/* ループの中 */
s = PORTA & 0x06;
 
if(s==0x00 && s != prev_s)
{
    count++;
}
prev_s = s;


このあとに、カウント数が5以上になったら、ブザーを1秒間だけ鳴らす動作を追加しました。
しかし、次の記述だとブザーが鳴り続けてしまいます。
1回だけ(1秒間を1回)ブザーが鳴った後は、ブザーを止めたいですが、どのようにすれば良いのでしょうか?



コード[C++]: 全て選択
1
2
3
4
5
if(count>=5)
{
 Buzzer=1;
 delay_ms(1000);
}

Name: みけCAT
[URL]
伝説なるハッカー(650,273 ポイント)
Date: 2017年4月25日(火) 22:31
No: 4
(OFFLINE)

 Re: 状態カウント

C素人 さんが書きました:1回だけ(1秒間を1回)ブザーが鳴った後は、ブザーを止めたいですが、どのようにすれば良いのでしょうか?

1秒後にブザーを止めるコードを追加すればいいと思います。
具体的な方法は、ブザーの制御の仕様がわからないのでわかりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: C素人
[URL]
Date: 2017年4月28日(金) 07:47
No: 5
(OFFLINE)

 Re: 状態カウント

[解決!]

みけCATさま

解決しました。ありがとうございました。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[15人]