量子化レベルメーターの製作
相変わらずタイトルだけでは意味不明ですが。
このアイデアは今から約40年前、CDがまだ普及とは言えない頃のパイオニアのCDプレーヤーにあります。
そのCDプレーヤーには普通のバー式のサウンドメーターがついていたんですが、スイッチで切り替えると量子ビットをそのまま出すという機能がついてました。
まぁ44KHzでCDの全データーなんて流しても全ビット点灯するだけなので、ピークホールドか何かで適当にデーターを間引いて表示していたんでしょうけど。
それが何の意味があるかというと「何もありません」
ただただ見てて楽しい(※個人的な感想です)だけです。
そもそも素人が作るサウンドメーターなんて入力電圧に対しどうのこうのなんて必要は全くないので、LEDがなんかチカチカしてればいいのではないかという発想です。副作用として8個のLEDだと分解能8ビットが分解能256ビットに大幅にアップします。
8x8マトリクスLEDをMAX7219でドライブ、写真右から縦1列が5msごとにサンプリングした量子化ビットで、その値がホールドされて左に順次流れていく動作になっています。
つまり、
←下辺 上辺→
◯◯◯◯◯◯◯◯ = 入力レベル0x00
●●●●●●●● = 入力レベル0xff
とすればいいわけです。
スケッチのloopの一部
// A0, A1 (R-CH, L-CHの数値を読み取る)
float a00=analogRead( A0 );
float a01=analogRead( A1 );
// 量子化する。200は入力レベルにあわせただけで本来は1024
int i = a00/200*0xff;
int j = a01/200*0xff;
// LEDマトリクスの右から1列目と2列めの値をセット
dispbar[1]=i;
dispbar[2]=j;
// LEDマトリクスの左から描写していく。
for (int k=8;k>=1;k--){
//maxTransferはMAX7912にデータを送る関数、からの列番号、データ(全点灯0xff)
maxTransfer(k,dispbar[k]);
//データーを2列分左にコピー。
dispbar[k+2]=dispbar[k];
}
//これでエラーにならないのはint dispbar[10]と宣言してるからです。
delay(5);
//100ぐらいにするとヌルヌルします。
簡単、てか描画パターンの定義すらないので普通のバーグラフより簡素です。
で、それに何の意味が・・・とまだモヤモヤしてる方もいるかも。
「見ていて楽しい」以外の実用性はありません。
以上です。
コメント
コメントを投稿