1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

analogRead()用の関数作ってみた

Last updated at Posted at 2016-03-04

Arduino(?)に繋いだ可変抵抗を本当に回した時だけ値を受けとるには?が勉強になりました。なるほど、こうやるのか!
で、

  • 平均化して、
  • 値が変ったときだけ出力

というのがやりやすいように関数にしてみました。

#移動平均を出力する関数

int averageStream(int val){
    static const int MODULUS = 8;
    static int val_hist[MODULUS];
    static int sum=0;
    static byte i_mod=0;
    
    sum += ( val - val_hist[i_mod] );
    val_hist[i_mod] = val;
    i_mod = ++i_mod % MODULUS;
    return sum / MODULUS;
}

値を入力すると直近8個の移動平均を出力します。

#値が変ったかを判定する関数

boolean isChanged(int val){
    static const int MODULUS = 4;
    static int val_hist[MODULUS];
    static byte i_mod=0;
    
    val_hist[i_mod] = val;
    i_mod = ++i_mod % MODULUS;
    for(int j = 0; j < MODULUS - 1; j++){
        if( val == val_hist[ (i_mod + j) % MODULUS ] ) return false;
    };
    return true;
}

直近の三つの値と比べて同じものがあれば偽、でなければ真を返します。

#まとめ
最近staticの使いどころが判ったので連発してみました。
これで一個のボリュームはいけるでしょう。

では複数にしたいときは?

  • クラスに変数と関数を登録して
  • インスタンスを作って...

みたいな感じなのかしら。こちら方面の流儀に疎いもんで...

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?