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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
masa_
記事: 1
登録日時: 6年前

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

#1

投稿記事 by masa_ » 6年前

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

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

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

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

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

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

コード:

 
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)
}

 

アバター
いわん
記事: 30
登録日時: 8年前

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

#2

投稿記事 by いわん » 6年前

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

返信

“C言語何でも質問掲示板” へ戻る