受け取った数値データにふれが出るのを丸める処理について。データの数値振れが出る原因を考え、1からわかりやすい手法で丸め処理する方法の解説です振れ止め改良ボリュームの振れこのA/D変換結果はボリューム(可変抵抗)を境い目のあたりにすると、出てくる数字が行ったり来たりと、振れがでます。A/D変換値を細かく求めることにはいろいろ考えさせらることが多々あります。入力される電圧が変動してるからです。その電圧を数値にすると変動する。対策ハード、回路で電圧変動がない電圧をA/D変換に送り込む電圧が変動してるので、それを安定させるのが最良なのは、そうなんですが。よっても微小な変動は必ず出ることはあります。A/D変換値を細かく求めるほど。できるならソフト設定だけで何とかしようということなんでこれを全部ハード側でするのは、つなぐ機器、回路、電源によっても変わるので、外部回路を付け足す必要もあり厄介です。それも、必要と場合に応じてできるだけやりましょうということで、切り分けて考えます。ソフトで処理するやはり、切り分けて考えると、ハード側だけでは厄介なので、できるだけ電圧変動のないような回路にして、。いうことと、ソフト側でも振れ止めの処理ということになります。入力電圧に変動がある限り、細かくとると振れは必ず出ます。振れるならどちらかに決めてることで振れを止めてしまう処理ということになるのですが、どちらに決めるか、、ということと、どれぐらいの振れ速度に対応するかということはなかなか厄介な問題です。その間の微妙なところがどちらになるかわからない!とA/D変換が困っているので、どっちに?といわれても、私も困りますやはり決めるなら、10回ぐらいの値を拾った内、出てきた目の多い方に。結局、平均を取って四捨五入するような処理になります。デジタルの数値なので境目の線引きが必要で、電圧が振れる限り、境目で変動はでることになります。5→5回とか、この辺を行ったり来たりとなることは出てきます。変動がでる範囲は確実に小さくはなります。実用で影響が少なくなる程度を目指します。その変動の影響を小さくしようということが目的です。振れ速度また変動する振れ速度も考える必要があります。A/D変換速度が十分遅いと、振れも遅くなります。遅い振れだとより扱いやすく、間隔を大きく空けて変換値を拾ってくれば、振れ変動も遅くなり、その数値を上のように丸める、というような処理でかなり抑えられるはずです。間を空けるということは、A/D変換値を得るまでの反応時間が長くなります。この辺のところがバランスですね。丸め処理100回の変換値を拾い、その平均をとり四捨五入します。少数を使わない簡易的な固定小数点の考え方の手法にします。(以下の方法はまとめると、少数を使わないようにする方法と、四捨五入する方法です)少数を使えばいいのですが、精度なんていらないのでルーチンとしては少数を使わない方がメモリも喰わないし一般に処理負担は軽くなります。このため平均するだけなのですが、すこしややこしい方法になっています。一桁増やす10倍して一桁増やし、割ったときに小数部がでると、10倍して増やした一桁(末桁)が小数部になります。(マイナスの場合は-5)5を足すと四捨五入で次の桁が上がるまず、合計に5を足します。これが四捨五入のためで、これで四捨五入になり次の桁が上がります。桁上がりアリこのあと末桁を切り捨てます。少数1桁目を四捨五入したのと同じになります。100回の変換値を拾い、その平均をとり四捨五入しています100回のA/D変換値で1つの結果をだしていることになり、速度はずいぶん遅くなりますが、反対に遅らせているということにもなります。この100回の変換値を拾うのを増やしていくと、どんどん変換を遅くすることができます。それを全部平均計算するので処理は増します。回数を増しても振れがその分、減るというわけでもありません。サンプリング数を多くして精度を増しても、変動しているものなのですから。;遅らせるだけなら、間隔を空けて変換値を取ってくるほうがよいでしょう。A/D変換速度は十分速いので、この程度ではボリューム入力では問題ありません。