teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]


新着順:51/789 記事一覧表示 | 《前のページ | 次のページ》

Re: お世話になっております!

 投稿者:nekosan  投稿日:2015年 5月31日(日)19時11分47秒
  通報 返信・引用
  > No.746[元記事へ]

猫サックスさんへのお返事です。



> なるほど、そのようにすると良いのですね。
> とりあえずは、モジュレーションとピッチベンドの記述だけをとにかく消してゆくことで超適当に対応しておりました・・・・(汗)


単にロジックを消してしまうと、入力値が不定になって、
変な動作になってしまうかと思います。操作する代わりに
なにか適当な値(といってもなんでも良いわけではないですが)
を仮定しておけばよいかと。
(ベロシティーに100とか)


> 相も変わらず、3オクターブのものを作ろうとしてはおりますが、
> 現時点では入力を沢山作るとかはとても難しそうに思えますので、
>
> arduino x 3台でいく感じとし、
> (まだ1個しか持ってはおりませんが・・・汗。この場合ですが、
> ・6in 6outのMIDIインターフェイス、
> ・またはMIDIマージボックスを買ってMIDIケーブル3本入力させる、
> ・あるいは音源を三台接続する。同じ音源モジュール一応3台持ってます・・・)
>
> でも、本当はMIDIケーブル1本で実現したいのですけれども。


MIDI信号のミキサ(マージボックス)がすでにあるので
あれば、それを利用するのも手だと思いますが、
そのためだけに使うのもなにかもったいないような
気がしますね。

I2CやSPIなどのシリアル通信ライブラリで、複数のArduino
を繋いでしまうとかできれば手っ取り早いのですが…
(複数のキー入力担当Arduinoを、シリアル通信の子にして、
 MIDI送信を受け持つ親から子を読み出すようにして)


そういう繋ぎ方なら、単なる配線ですむので、線材の
値段(数円~数十円程度?)で済むかと。



> それでまずは、静電容量センサー式へのトライです。
>
> 先日教えて頂きました、「デジタルピン
> 1本だけで入力できるようなタッチ式のスケッチ」の件ですが、
> 現在使わせていただいておりますスケッチに何とか(無理やり・・・)導入してみましたが・・・。コンパイルは通りましたがやはり(当然!)まともには反応せず(笑)
> (以下・・・)
>
> /**************/
> /* main logic */
> /**************/
> int f=0;//フィルタ用変数
> void setup() {
>   int i;
>
>   Serial.begin(31250);      // connect to MIDI synth
>   //Serial.begin(38400);      //connect to PC
>
>   for (i=0;i<14;i++){
>     pinMode(key[i], INPUT);
>   }
>   pinMode(led, OUTPUT);
>
>
>   pinMode(9,OUTPUT);
>   digitalWrite(9, LOW);  // 放電しておく
>   //LED点灯用に13番ピンをデジタル出力
>   pinMode(13,OUTPUT);
> }
>
>
> void loop(){
>   /* input from keys and pots */
>   key_input();
>
>   /* function key */
>   funtion_key();
>
>   /* check push or release / output note on/off */
>   check_and_output();
>
>   /* store "old notes" */
>   store_old();
>
>
>   //静電容量変化量の変数を用意
>   int a=0;
>   //9番ピンをLOWで出力
>   digitalWrite(9, LOW);  // 放電 and プルアップ抵抗オフ
>   pinMode(9,INPUT);  // 入力モードに変える(充電開始)
>   //9番ピンがHIGHになるまでをカウント
>   while (digitalRead(9)!=HIGH){
>     //カウントする
>     a++;
>   }
>   delay(1);
>   //9番ピンをLOWにする
>   pinMode(9,OUTPUT);  // 出力モードに戻す
>   digitalWrite(9, LOW);  // 放電しておく
>
>   //値を滑らかにするフィルタ式
>   f+=(a-f)/2;
>   //モニタリング:フィルタ値を出力
>   Serial.print(f);
>   Serial.print(" , ");
>   Serial.println(a);
>
>   //LED点灯のプログラム
>   if(f>5){//値が5より大きい場合点灯
>     digitalWrite(13,HIGH);
>   }else{ //それ以外消灯
>     digitalWrite(13,LOW);
>   }
> }
>
> (きっとめちゃくちゃなのでしょう・・・)この状況・・・では、9番ピンに接続しておりますアルミには触れても全く音は出ず(LEDは点きます。)、そして、そのまんま、まだタクトスイッチが付いている他の入力では、(タクトスイッチを押すと)アタック音だけ音が出るといった感じで、あえなく失敗中で御座います。



入力処理の実体は、「key_input()」関数にまとめて
あるので、その中に押し込むとよいかと思います。



あと、プログラムの流れと各部分の動作は、現在の
Arduino-IDEではどうしても解りにくいところがあって、
各方面で指摘されています。

具体的には、ステップ実行などのシミュレーション環境が
Arduino-IDEには搭載されていないことです。

多分、スケッチを書いたり、修正したりしたときに、
その動作がどうなるかを想像しにくいのは、Arduino-IDE
の機能不足(シミュレータが無い)によると思います。

短いスケッチや簡単なスケッチは、さくっと書けて簡単に
実行できて、便利なのですが、少し長いスケッチ、複雑な
スケッチを書き始めると、とたんに厄介になってくるのが
Arduino-IDEの特長だと思います。

そのためにシリアルモニタがあるのですが、複雑な処理を
させたい場合は、使い勝手は良くないので…



サードパーティー製ソフトなどで、Arduinoスケッチ用の
シミュレータが公開されていたり、Eclipseのような環境
ではArduinoのプラグインが公開されてたりしています。

ステップ実行しながら変数の値がどのように変わっていく
のか目で追って眺めたり、実行の最中に変数の値を書き
換えて、その後の実行を追ったり、といったことができる
ので、ためしにシミュレータ環境をいじってみると面白い
かもしれません。

http://www.smashingrobotics.com/arduino-simulators-lineup-start-developing-without-real-board/

ここでも紹介されている、「Simulator for Arduino」

http://virtronics.com.au/Simulator-for-Arduino.html

は、オーストラリアの人が作ったArduino専用のシミュレータ
で、有料なのですが、以前お試し版をちょっと弄ってみました。

このシミュレータは、Eclipseのように(Arduinoと無関係の)
たくさんの機能が入っているわけではなく、Arduinoに特化
しているので、比較的わかりやすかったりするのですが、
対応しているライブラリが限られていたりするので、用途に
少し制限があるかと思います。(バイナリコードを元にした
シミュレーションではない)

どのようなことができるのかは、ムービーでなんとなく
お分かりいただけるかと。


http://playground.arduino.cc/Code/Eclipse

Eclipseのプラグインなんかは、生成されるバイナリコード
を元にシミュレーションしたりするので、機能的には
良い感じみたいなんですが、Eclipseに慣れてないと、
どハマリするかと思います。



> 後日、これがもしうまくいった暁には、9番ピン以外のピンにも対応するようにスケッチを書き換えるにはどうしたらよいか、という初歩的な?問題を解決したいです。それにはもう少しお利口さんにならないと・・・といった感じです。(笑)また新しいアイデア練って挑戦してみます。
>
>
> しかしながら、これまでのスケッチそのままで(最初の標準のスケッチのままで)、物理的な接続だけを(教えていただいた1Mの抵抗を挟んでのタッチ式接続)タッチ式に変えますと、アルミに指で触れたただけで、音は鳴ってくれました。
> ただ、これは例のチャタリングというのでしょうか、超高速連打で音が鳴ってくれてましたが・・・。
>


チャタリングが原因なのか、周囲のノイズが原因なのか、
フィルタリングのロジックでノイズを取りきれてないのが
原因なのか…これだけだと原因の切り分けが難しいですね。



> そして、スイッチ式もやってみました。
>
> これは こちらの
> お手製パネルスイッチを参考に縦8センチ、横5センチで、計4つのスイッチを作成してやってみました。
>
> 作ってみましたパネルスイッチは、微妙にそれぞれ感度が違っていたりして、両面テープの種類、サイズを何種類も変えては試してみたり、
> プラ板のサイズを変えてみたり、いろいろやってみましたが、やっぱりアルミなどのタッチ式のほうが作りもいいなぁ・・・という気が強くいたしました。
> 因みにこれは踏み方によってうまく音が出なかったりはありましたが一応フットペダルのようには動きました!
>


このアルミスイッチのは、いわゆる「静電容量式のタッチセンサ」
ではなく、「タクトスイッチ」のような金属接触のセンサなので、
1MΩの抵抗ではなく、1kとか、10kとか、そのくらいの小さい抵抗
じゃないと、ノイズの影響を強く受けます。

あと、接触式のセンサだと、どうしてもチャタリングが起きる
ので、フィルタ回路なり、ソフト側のフィルタリング処理なりが
必要になるかと思います。特に、タクトスイッチとかよりも
接点面積が馬鹿でかいスイッチとなるので、フィルタ処理
(ソフトまたは回路)はそれなりに大げさにやらないと
うまくチャタリングが取り除けないかと。


回路でやってしまえば、ソフト側が比較的単純化できるるかと。
「シュミットトリガ チャタリング フィルタ」などと検索
してみると、動作原理、回路構成、定数などがわかります。
(なお、ArduinoのAT-MEGA328は、デジタル入力回路が
 シュミットトリガなので、この手のフィルタ回路は
 組みやすくなっています)


逆に、そのあたりを作りこんでしまえば、ソフト側の処理は
あるていどデジタル回路に特化して考えられるので、いろいろ
楽になるかと思います。


3オクターブの鍵盤を、プラ板みたいので加工するとなると、
強度とか耐久性とか、いろいろ心配なところもありますねぇ。
あと、それだけのサイズのプラ板をどこから調達するかとか。

回路とかソフトとかよりも、その場合は構造物の作りこみの
あたりがネックになってきそうな気がします。

 
 
》記事一覧表示

新着順:51/789 《前のページ | 次のページ》
/789