合計 昨日 今日

チャタリング関数(ブール宣言)

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: masa_
[URL]
ぴよぴよ(154 ポイント)
Date: 2017年8月03日(木) 23:16
No: 1
(OFFLINE)

 チャタリング関数(ブール宣言)

初めまして、今回初めて質問させていただきます。

今、arduinoを用いてチャタリング関数を参考書をもとに考えているのですが、
サンプルコードでイマイチ理解ができないところがあり質問させていただきました。

ブール宣言を用いてチャタリングを取る関数で

boolean tsw = digitalRead(dx); //   ⇦ これ以降の内容がイマイチ理解できません。
                    左のコードはtswはdigitalReadで読み取ったHi or Lowを代入しているように
                    見えるのですが、あっていますか?

while( tsw == digitalRead(dx) ) ;
delay(300);

わかりにくい質問かもしれませんがよろしくお願い申し上げます。

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
void setup(){
  pinMode(2, INPUT_PULLUP);// タクトスイッチ(D2)接続
  pinMode(13,OUTPUT);        // Arduino上のLED(D13)設定
 
}
boolean sw=false;  // 初期値はfalse
 
void loop(){
  while( !chtsw(2) ) { // スイッチが押された状態確認
    if( sw ) digitalWrite(13,LOW);
    else digitalWrite(13,HIGH);
 
    sw = !sw;
  }
  while( chtsw(2) );// スイッチが離された状態確認
}
 
boolean chtsw(byte dx) {
 
 boolean tsw = digitalRead(dx);  //
 while( tsw == digitalRead(dx) ) ;
 delay(300);
 
 return !tsw;//押された状態=false(LOW)、離された状態=true(HIGH)
}

Name: いわん
[URL]
入門者(3,623 ポイント)
Date: 2017年8月05日(土) 22:47
No: 2
(OFFLINE)

 Re: チャタリング関数(ブール宣言)

関数の機能が不明なものが多いので推測ですが、
最初に現在のスイッチの状態を読み込んで
>boolean tsw = digitalRead(dx);
スイッチの状態が変化するまで待つ(変化したらループを抜ける)
>while ( tsw == digitalRead(dx));
チャタリングを回避するために一定時間待つ
>delay(300);
という処理を行っているのではないでしょうか。


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

オンラインデータ

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