12chアッテネータ2検討(製作編10)

製作編10

キー処理を追加して、アッテネーター動作を確認します。

キー追加

アッテネータ動作の確認にはUp/Downの2個のキーが必要です。アッテネーターユニットとしては、さらにMuteキーが必要です。ここでは、Up/Downの2つのキーを設定してアッテネータ動作のみの確認を行います。入力ポートはd13とd12を使用します。arduinoには、入力ポートにPullUp抵抗を設定できるのでこの機能を利用します。入力ポート設定は以下のとおりです。

byte key0 = 13;

byte key1 = 12;

byte key;

pinMode(key, INPUT_PULLUP);

arduino UNOの内部PullUp抵抗は20~50kΩとの事なので、このキー回路は以下のとおりとなります。

キーはタクトスイッチをブレッドボード上に挿してジャンパーピンで配線しました。

これでキー回路追加は完了です。

demo5

初めにキーの読みとり処理を作成します。作成上の注意点としては、あとでMuteキーを簡単に増やせるようにしておきます。チャタリングの除去は、過去の経験から50ms後に1度接点の状態を確認をするのみとします。Key_numで押されてキー(key0 or key1)を管理し、k_statでキー処理自体の管理をします。k_stat各状態は以下のとおりです。

k_stat=0;キー入力なし

k_stat=1;キーオン検出

k_stat=2;キーオン確定

k_stat=3;キーオフ検出

k_stat=4;キーオフ確定

キーオン検出時に押されたキー情報をkey_numに格納し、それ以降の処理はそのキーのみ確認を進めます。1回キーが押されるとval_posを押されたキーによりポジション値を200増減します。コンパイルで、何回かエラーが発生し修正しましたが比較的容易に完成しました。実行時の画面は以下のとおりです。

シリアルモニタ画面には、key0 onで200増加、key1 onで200減少したポジションアドレスが表示されています。demo5はキー処理のみの追加なので、確認はここまでです。

demo6

demo5でキー処理を追加したので、そのキー処理に従ってボリュームモーターを駆動します。キーが確定したところで、下記関数を繰り返しコールします。

ReadPos(0); //現状のボリュームポジションをval_pos(0)へ格納

jg_cont(0);   //目標と現状ポジションを比較して駆動方向をcont(0)へ格納

control(0);   //cont(0)に従ってモーターを駆動

cont(0) == 0で移動完了下記がdemo6実行時の画面です。

key1 on / key0 on後にpos=xxxが表示されますが、key処理後の目標ポジションです。その後のActual positionが移動後のポジション値を示しています。このときのオシロスコープの画面は以下のとおりです。

黄色がモーター駆動信号で、青がポジション信号です。最初にkey0(Up)を連続して押し、途中でkey1(down)を数回押して、その後key0を数回、さらにkey1を押し続けています。精度はさておき、要求の動作はしているようです。次回は実際のアッテネーション動作の実装の準備を進めます。

 

つづく(製作編11)