ポテンショメータに追加で接続されている ATmega マイクロコントローラに接続された MP3 ボードがあります。MP3 ボードはオンボード スピーカーを介して MP3 データを直接再生するため、出力の音量を設定することもできます。
ご想像のとおり、poti から値を読み取り、マイクロコントローラーに転送します。残念ながら、マイクロコントローラーは音量を直線的に増加させません。したがって、値 0 から 128 まではほとんど何も聞こえず、128 から 255 (最大) までは音量が急速に増加します。
次の関数でこの問題を解決できることがわかりました。
vol = 1 - (1 - x)^4
ただし、x は 0 から 1 の間でなければならず、結果も 0 から 1 の間です。
私はマイクロコントローラを使用しているので、
- この数式を変換して、符号なし整数で使用できるようにします
- 1秒間に複数回poti値を読み取るため、最適化します(おそらくいくつかの安価なバイナリ関数を使用します)。したがって、この関数は毎秒複数回計算する必要があり、マイクロコントローラーを他のものにも使用したい ;-)
たぶん、あなたの何人かはアイデアを持っていますか?素晴らしいことだ!
uint8_t linearize_volume(uint8_t value) {
// ideas?
// please don't use bigger data types than uint16_t
}