I’m loser, baby.

So why don't you kill me?

mbed LPC1114手習い01 / PCMについて学ぶ 続き

昨日の問題(日記を書いたのは今日ですが)を解決すべく、もうちょっと頑張ってみました。

 

まずは原因を突き止めるため、ミッションの1項目の予定を繰り上げてLPC1114とシリアル通信してみました。

実は前もシリアル通信してみようとして、上のコネクタで上手く行かなかったのですが、今回はすんなり行きました。結果から言うと前回はRxDとTxDの接続を間違えていたようです。そんなの気づけよ、という話なんですが、ダメなときは思いつかないし、調子がいい時は考えなくても思いつくものですね。

なんでこんなことだけで日記を書こうかと思ったかというと、自分の勉強が成果を上げるときというのは目的意識がはっきりしているときだと改めて確認したからで、そのためのメモとして書いてます。

例1)

Linuxを勉強したい!>5年位インストールしてはよく判らなくてWindowsに戻すを繰り返す>Webアプリで面白いこと思いついた!でも自前サーバが必要>自宅サーバを立ち上上げてダイナミックDNSで公開すればいいや>Linux入れて3ヶ月でなんとかサーバが立ち上がる

例2)

取り敢えずLPC1114でシリアル通信したい、Forthとか動いたら格好良いし>なんか上手く動いてくれない>LPC1114でシンセ作る!>不具合で音が出ない>原因探るのにシリアル通信必要>やってみたら前回は接続間違えてただけでした

てな感じで「ただあれをやってみたい」ではダメで「これのためにあれが必要!」となるとガッっと前に進めるんですよね。ただ、前段のグダグダも全く不要ではなくて、グダグダやってる時に潜在意識に色々貯まっていって、きっかけがあると学習曲線のしきい値を超えるんでしょうね。

 

でもって、printfで確認したところ、"mid_vol / smpl_rate"の値が"0.00000000”とかになってる。もしやと思って"xxx_vol"を全てfloatにしたら正しく計算されて、音もきちんと出てくれました。int同士で割り算した場合は答えは自動的にfloatになるけれど、答えは正しいとは限らないんですね。知らなかった。

 次はAnalogInクラスを使って音程と音量を可変抵抗でコントロールしてみます。その次に8bit11kHzのサウンドファイルを再生できたら、取り敢えず現状でのPwmOutライブラリに関する学習はOKかしら。