今日は東京都美術館の大英博物館展へ行って来た。
大英博物館。一度は行ってみたいと思っていた。
何かで今回の展示の情報を見つけて、早速行って来た次第。
モノは100個ということで、あまり期待してなかったのだが、なかなか楽しかった。
特段何が見たいとかなかったのだけれど、古代文明の遺物の現物が見られるという期待感はあった。
今回の展示の内容も、一部現代の作品もあるものの、多くは期待通りかなり古い時代のもので、それなりに見応えがあった。
午後も遅くで、規模から考えてそんなに混んでいないだろうと思ったのだが、チケット売り場には結構人が並んでいた。
ただ、窓口が2つしか開けてないのと、東京都美術館は料金の割引がいろいろあって、その確認もあるので捌きが遅いのが原因だろう。
前売りとか上野公園の入口の案内所でも売っているようだったので、そこで買っておけばよかった。
一般は1600円。
解説の音声ガイド(ヘッドホンとプレーヤのシステム、520円)も利用した。
入場料と合わせると、ちょっと割高感がある。
ただ、NHKと提携しているのか、タイムスクープハンターという番組のノリで俳優の要潤さんが解説をしていて、悪くない。
中へ入ると、人はそこそこ入ってはいたが、見えないというようなことはなく、落ち着いて見る事ができた。
お客さんは、夫婦、カップルが多く、どちらかというと女性が目立った。
印象に残ったのは、ヘブライ語が書かれたアストロラーベ、ビーグル号のクロノメーター、ロゼッタストーンなど。
ロゼッタストーンはレプリカだったけど、字ははっきり読めるし、これが発見されたときのことを考えると、感無量だ。
アストロラーベというのは天体観測機具とでもいうのだろうか、真鍮制の精巧なものに見えた。
これが1300年代のものだという。
クロノメーターは、航海用具とでもいうのだろうか。ビーグル号というだけでいろんなことが想起させられる。
日本の縄文土器もあり、これがなんかイメージが違って見えた。
ガンダーラの仏像とインドのターラーの菩薩像というのは、年代もちがうのだけれど、同じ仏教なのにニュアンスがかなり違う。
ラムセス二世像は圧巻。
アウグストゥス帝の胸像は美しい。
そんなこんなで2時間半、閉館ちかくまで飽きる事なく、むしろ時間を忘れて鑑賞していた。
出口に売店があって、関連商品を売っているのだが、少々お高い。
アストロラーベの模造品なんか、欲しいなと思ったけれど値段はなんと12万である。
他は、ちょっとめぼしいものがなかった。
金細工のものの模造品も、現代の方がはるかに製作技術は高いであろうに、ちょっと出来が悪く見えた。
100点と言う事で、1点1点を十分じっくり見るという感じだった。
色んな文明、年代のものがあるので、飽きる事が無い。
展示コーナーごとに発見場所の地図がパネルで大きくまとめられており、全体的な把握と再確認がしやすかった。
欲を言えば、本場の大英博物館にはこんなのもありますよ的なものがあっても良かったように思う。
もっともっと深堀りしたい部分があった。
点数的に物足りないかなと思っていたが、どうして十分という感じであった。あまり多くても見切れなくなってしまうだろう。ただ、欲を言えば、あと50点くらいは見たかった。
入場料から考えると、そのくらいないとちょっと納得感がない。
今日は天気も良く、上野公園を通り抜けるのも気持ちがよかった。
美術館、博物館系に行ったのは久しぶりだ。
あ、いやSF展には去年行ったか。
年に何回かは行っていい。
情報がまとまって見られるサイトがあるだろうか。
昔は、映画情報を見る為にぴあを隅から隅まで読んでいた時代があって、そういう時にひっかかったものだが、今はなかなかそういう機会がない。
そういえば、上野東京ラインの電車を初めて見た。
青とグリーンのラインで、なんか山手線みたいな車両。
せっかくだから乗ってみればよかった。
そのせいなのか、京浜東北線の快速が、ほぼ快速ではなくなりつつあるみたいだ。
個人的にはその逆の方がありがたいのだが。
バンクアップスイッチのところでつまづいていたのだが、ようやく解決策を見いだす。
最初はバンクスイッチだけでひとつArduinoのピンを使っていたのだが、4桁7セグメントLEDにEPROMに保持しておいたプログラムチェンジナンバーを表示するのと、可変抵抗で保存させるプログラムチェンジナンバーをひょうじさせるのとで切替がうまくできないので、オルタネイトタイプのスイッチで切り替えるようにしたことでピンが足りなくなった。
そこで、バンクアップスイッチの方は、ナンバー切り替えボタンの機構に組み込む形にした。
以前解説したとおり、ここは5つのボタンを抵抗値で読み取る仕組み。
switch caseステートメントでスイッチを切り替えているので、case 6 ということになる。
このスイッチが一回押されると、ひとつカウントをアップするというだけなのだが、ここが難しかった。
ひとつはスイッチのチャタリング。
一回ボタンを押すといっても、case 6 の時に単純に1を足すというようなコードでは、十数回とかカウントされてしまう。
そこはひとつだけ感知するようなコードは以前にも使っているので、それをそのまま使ったのだが、そのカウントを変数に保存するところが、なかなか見えなかった。
最初、switch caseステートメントの中でコードを書いていて、全然うまくいかなかった。
switch caseステートメントの中は検出だけさせて、その値が変化した時だけカウントアップする、というような形でようやくメドがついた。
私の頭では、こういうところがなかなかすぐ出て来ない。
一応その部分だけコードを書いておくと、
抜粋なので、無論これだけでは動かないが、一応解説しておくと、
swNo1は、6つのボタンが押されたときの抵抗値から1~6の番号を返す関数の結果が入る。
なので、6のボタンが押された時の動作がcase 6以下ということになる。
swCount6 += 1;
で変数は1ずつ増えるが、チャタリングがあるので、一回押しただけでもここが10以上になってしまう。
で、ここで10になった時だけ動かす
if (swCount6 == 10)
ブール型の変数の値を反転させる。
swState6 = !swState6;
忘れてはいけないのは
swCount6 = 0;
という部分で、これはdefault 要するにcaseの値以外の時に動作するコードに記述する。
また、サンプルにはないけど当然ながら、case1~5のところにもそれぞれこのコードを挿入しておく。
これがないと、swCount6の値はどんどん加算され続けるばかりで、10が出ないので、swState6 が反転しないことになってしまう。
このリセットの仕方も悩んだ部分。
そして、switch caseステートメントが終わったあとで
ブール型変数の結果を新しい変数に代入する。ここで一応整数型に型変換になっている。
なくてもできそうなのだが、うまくいかなかった。
newSwState6 = swState6;
newSwState6 != oldSwState6
ここで、変数値が変わっていたらBankCount に1を足す。
oldSwState6 = newSwState6;で、変数の値を保存しておく。
その後は、カウントが5になったら0に戻す。
こんな感じで、ようやく抜け出す事ができた。
何か参考にでもなれば幸いである。
参考にさせて頂いたサイトがあるのでご紹介しておく。
http://s-azcat.com/archives/377
モード変更のスイッチは、LED付きのオルタネイトタイプの角形スイッチを買って来たのだが、どうもこのスイッチ、大きさは丁度いいのだが、スイッチの確実感が弱く、こころもとない。
まあデザイン的には気に入っているので、これを実装する事になりそうだが、LEDの輝度もいまひとつ。
しかし、同じようなスイッチは秋葉原では他で見つけられなかった。
これで、あとはモードONの時に可変抵抗の値をセグメントLEDに表示させ、OFFの時は通常のスイッチ基切替モードにするだけなのが、このモードのifステートメントの中に入れるか外に置くか、ちょっと整理しなければならない。
いずれにしても、また一山超えた。
今回で、ようやくArduinoの演算子を概略覚えた感じだ。
これがわからないと、やはりいろんな式がつくれない。
ということで、回路とコードの設計はほぼメドが付いた感じ。
コードを一旦整理して、あとはMIDI、USBまわりを仕上げていこう。
最初はバンクスイッチだけでひとつArduinoのピンを使っていたのだが、4桁7セグメントLEDにEPROMに保持しておいたプログラムチェンジナンバーを表示するのと、可変抵抗で保存させるプログラムチェンジナンバーをひょうじさせるのとで切替がうまくできないので、オルタネイトタイプのスイッチで切り替えるようにしたことでピンが足りなくなった。
そこで、バンクアップスイッチの方は、ナンバー切り替えボタンの機構に組み込む形にした。
以前解説したとおり、ここは5つのボタンを抵抗値で読み取る仕組み。
switch caseステートメントでスイッチを切り替えているので、case 6 ということになる。
このスイッチが一回押されると、ひとつカウントをアップするというだけなのだが、ここが難しかった。
ひとつはスイッチのチャタリング。
一回ボタンを押すといっても、case 6 の時に単純に1を足すというようなコードでは、十数回とかカウントされてしまう。
そこはひとつだけ感知するようなコードは以前にも使っているので、それをそのまま使ったのだが、そのカウントを変数に保存するところが、なかなか見えなかった。
最初、switch caseステートメントの中でコードを書いていて、全然うまくいかなかった。
switch caseステートメントの中は検出だけさせて、その値が変化した時だけカウントアップする、というような形でようやくメドがついた。
私の頭では、こういうところがなかなかすぐ出て来ない。
一応その部分だけコードを書いておくと、
int BankCount =0;
int swCount6 = 0;
boolean swState6 = false;
int newSwState6 =0;
int oldSwState6 =0;
int swNo1;//関数から返るスイッチのナンバーを格納
//------------------------------
void setup() {
}
//------------------------------
void loop() {
switch (swNo1){
case 6:
swCount6 += 1;//スイッチ6が押されたらカウントアップ
if (swCount6 == 10) {
swState6 = !swState6;
}
delay(1);
break;
default:
swCount6 = 0;
break;
}
newSwState6 = swState6;
if(newSwState6 != oldSwState6) {
BankCount ++;
oldSwState6 = newSwState6;
if(BankCount >= 5) {
BankCount = 0;
}
}
}
抜粋なので、無論これだけでは動かないが、一応解説しておくと、
swNo1は、6つのボタンが押されたときの抵抗値から1~6の番号を返す関数の結果が入る。
なので、6のボタンが押された時の動作がcase 6以下ということになる。
swCount6 += 1;
で変数は1ずつ増えるが、チャタリングがあるので、一回押しただけでもここが10以上になってしまう。
で、ここで10になった時だけ動かす
if (swCount6 == 10)
ブール型の変数の値を反転させる。
swState6 = !swState6;
忘れてはいけないのは
swCount6 = 0;
という部分で、これはdefault 要するにcaseの値以外の時に動作するコードに記述する。
また、サンプルにはないけど当然ながら、case1~5のところにもそれぞれこのコードを挿入しておく。
これがないと、swCount6の値はどんどん加算され続けるばかりで、10が出ないので、swState6 が反転しないことになってしまう。
このリセットの仕方も悩んだ部分。
そして、switch caseステートメントが終わったあとで
ブール型変数の結果を新しい変数に代入する。ここで一応整数型に型変換になっている。
なくてもできそうなのだが、うまくいかなかった。
newSwState6 = swState6;
newSwState6 != oldSwState6
ここで、変数値が変わっていたらBankCount に1を足す。
oldSwState6 = newSwState6;で、変数の値を保存しておく。
その後は、カウントが5になったら0に戻す。
こんな感じで、ようやく抜け出す事ができた。
何か参考にでもなれば幸いである。
参考にさせて頂いたサイトがあるのでご紹介しておく。
http://s-azcat.com/archives/377
モード変更のスイッチは、LED付きのオルタネイトタイプの角形スイッチを買って来たのだが、どうもこのスイッチ、大きさは丁度いいのだが、スイッチの確実感が弱く、こころもとない。
まあデザイン的には気に入っているので、これを実装する事になりそうだが、LEDの輝度もいまひとつ。
しかし、同じようなスイッチは秋葉原では他で見つけられなかった。
これで、あとはモードONの時に可変抵抗の値をセグメントLEDに表示させ、OFFの時は通常のスイッチ基切替モードにするだけなのが、このモードのifステートメントの中に入れるか外に置くか、ちょっと整理しなければならない。
いずれにしても、また一山超えた。
今回で、ようやくArduinoの演算子を概略覚えた感じだ。
これがわからないと、やはりいろんな式がつくれない。
ということで、回路とコードの設計はほぼメドが付いた感じ。
コードを一旦整理して、あとはMIDI、USBまわりを仕上げていこう。
今日はまた部品調達で秋葉原へ。
買い物は、買い忘れたフットスイッチ、LED付きプッシュスイッチ、電源スイッチ、基板、4pのコネクタ。
まずは秋月電子の一角に行く。
金属製のモーメンタリタイプのフットスイッチは千石電商。640円。
今日は歩くだけで汗をかく。
ドトールで一休み。
プッシュスイッチは、フットスイッチと平行して手で押しやすいようにということで、マルツパーツにて。他のお店では見つけられなかった。
電源スイッチ用の波動スイッチもマルツ。
ここはスイッチ類が探しやすい。
基板は、細長いものを探していて、これは秋月電子。
4pのコネクタは、Arduinoから基板へ配線するために、と思って探したのだが、なかなか見つけられない。
駅前のマーケットの(ラジオセンターと言うらしい)2階で見つけた。
ちょっと高いけど。
と思ったらメスのを買って、帰ってよく考えたら必要なのはオスだった。
オス-オスのピンを買わないとダメだ。
2mmのネジが必要なので、それも買おうと思ったんだけど、ネジはあったけどスペーサがなかった。
ネジ類のお店は思い出せなくて、今回は断念。
他にちょっと衝動買いしたものもあって、ちょっと財布が寒くなってしまった。
秋葉原は、今は完全にAKBとアニメの街という感じで、いい歳をした私が行くのは、ちょっと気が引けたりする。
もちろん、相変わらずパソコンショップは軒を連ねているし、パーツ屋さんも生き残っている。
が、パソコンショップは、もう往時の勢いはないし、大型店がひとつもあれば十分という感じだろう。私自身も、もう新しいものにはあまり興味を惹かれない。
パーツショップは、確かに秋月電子なんかはいつ行っても凄い混んでるけど、お店が狭いからであって、集まる人数の総数をみれば、圧倒的に少数派だろう。
ラジオセンターのキャッチが昭和の電気少年集まれみたいな感じなので、たしかにそんな人も多いのだが、先がない。
結局、今のアキバのメインコンテンツは、メイド喫茶なんかも含めてアニメ関連ということになるのだろう。そこに資本も人も集まり群がっている。
コンテンツ産業だなんだと国をあげてクールジャパンもいいけれど、今日は、なにかその終わりの予兆を感じた。
今のアキバは単に消費するだけの街になってしまっている。
そして、私が思うところ、結局はその向かっている先はエロでしかないと思う。
そして、その構図の中に自由も活力もない。
そういう目的に集まって来る人達が、何か新しいものを生み出すだろうか。
外国人観光客も多く見かけるが、何遍も来たいと思うだろうか。
東京オリンピックの頃には完全に陳腐化してしてしまっているのではないか。
うそが平然とまかり通るということに、そろそろ皆嫌気がさして来ているのではないか。
いつまでも子供でいられる時代は終わって、大人にならなければいけない時代になってゆくということである。
これは一気に来ると思う。
そのとき、秋葉原に何が残るだろうか。
コードの方は一進一退で、可変抵抗を動かした時だけセグメントLEDの表示を切り替えるというのは、ちょっと難しいので、オルタネイトタイプのプッシュスイッチを押した時だけ、プログラムナンバー選択モードにすることにした。
しかし、そうするとピンが足りないので、独立してピン配置をしていたバンク切り替えスイッチを、抵抗値で判別するスイッチ機構の方へ押し出したのはいいのだが、ここのコードでつまづいている。
一見簡単なようで、これが全然思う通りにならない。
もう少しなのだが。
買い物は、買い忘れたフットスイッチ、LED付きプッシュスイッチ、電源スイッチ、基板、4pのコネクタ。
まずは秋月電子の一角に行く。
金属製のモーメンタリタイプのフットスイッチは千石電商。640円。
今日は歩くだけで汗をかく。
ドトールで一休み。
プッシュスイッチは、フットスイッチと平行して手で押しやすいようにということで、マルツパーツにて。他のお店では見つけられなかった。
電源スイッチ用の波動スイッチもマルツ。
ここはスイッチ類が探しやすい。
基板は、細長いものを探していて、これは秋月電子。
4pのコネクタは、Arduinoから基板へ配線するために、と思って探したのだが、なかなか見つけられない。
駅前のマーケットの(ラジオセンターと言うらしい)2階で見つけた。
ちょっと高いけど。
と思ったらメスのを買って、帰ってよく考えたら必要なのはオスだった。
オス-オスのピンを買わないとダメだ。
2mmのネジが必要なので、それも買おうと思ったんだけど、ネジはあったけどスペーサがなかった。
ネジ類のお店は思い出せなくて、今回は断念。
他にちょっと衝動買いしたものもあって、ちょっと財布が寒くなってしまった。
秋葉原は、今は完全にAKBとアニメの街という感じで、いい歳をした私が行くのは、ちょっと気が引けたりする。
もちろん、相変わらずパソコンショップは軒を連ねているし、パーツ屋さんも生き残っている。
が、パソコンショップは、もう往時の勢いはないし、大型店がひとつもあれば十分という感じだろう。私自身も、もう新しいものにはあまり興味を惹かれない。
パーツショップは、確かに秋月電子なんかはいつ行っても凄い混んでるけど、お店が狭いからであって、集まる人数の総数をみれば、圧倒的に少数派だろう。
ラジオセンターのキャッチが昭和の電気少年集まれみたいな感じなので、たしかにそんな人も多いのだが、先がない。
結局、今のアキバのメインコンテンツは、メイド喫茶なんかも含めてアニメ関連ということになるのだろう。そこに資本も人も集まり群がっている。
コンテンツ産業だなんだと国をあげてクールジャパンもいいけれど、今日は、なにかその終わりの予兆を感じた。
今のアキバは単に消費するだけの街になってしまっている。
そして、私が思うところ、結局はその向かっている先はエロでしかないと思う。
そして、その構図の中に自由も活力もない。
そういう目的に集まって来る人達が、何か新しいものを生み出すだろうか。
外国人観光客も多く見かけるが、何遍も来たいと思うだろうか。
東京オリンピックの頃には完全に陳腐化してしてしまっているのではないか。
うそが平然とまかり通るということに、そろそろ皆嫌気がさして来ているのではないか。
いつまでも子供でいられる時代は終わって、大人にならなければいけない時代になってゆくということである。
これは一気に来ると思う。
そのとき、秋葉原に何が残るだろうか。
コードの方は一進一退で、可変抵抗を動かした時だけセグメントLEDの表示を切り替えるというのは、ちょっと難しいので、オルタネイトタイプのプッシュスイッチを押した時だけ、プログラムナンバー選択モードにすることにした。
しかし、そうするとピンが足りないので、独立してピン配置をしていたバンク切り替えスイッチを、抵抗値で判別するスイッチ機構の方へ押し出したのはいいのだが、ここのコードでつまづいている。
一見簡単なようで、これが全然思う通りにならない。
もう少しなのだが。
YAMAHAのディストーション、DI-01を外部電源化したので、ボードに(まだないけど)組む準備はできた。
ということで、つなぎ込んでみる。
で、ZOOMのMS-50Gの方はT Screamとアンプの組み合わせで使っていたのだけれど、T ScreamのかわりにDI-01を入れてみた。
これが案外いい。
DI-01は元々すごくトランジスタっぽい音をしていると私は思っているのだが、高音弦の鳴りが気に入っている。
ところが低音減は、こう独特のブーミーさがあって、ここがとても使いにくい点だった。
なので、BOSSのオーバードライブと並列のユニットを作ったりしていたのだが、MS-50Gのアンプシミュと組み合わせる事で、音作りの幅が広がったという感じ。
まあ、今どきこんなディストーションを使っている人もまずいないのだろうが、これはオールドというより、私が一番最初に購入したエフェクターということで、いわばルーツみたいなものなのである。
自作のループセレクターは結局歪み系だけで埋まりそうだ。
空間系はGT-8で賄えるのだが、実は欲しいエフェクトはYAMAHAのSPX90の中にある。
無論、SPX-90は持っているのだが、なんとかこれだけ再現できないかなと思っている。
使いたいのはSTEREO FLENGEという左右それぞれ設定できるフランジャーで、これをショートディレイみたいな感じでかける。
歪み系に組み合わせると松原正樹風のサウンドと言ったらわかってもらえるだろうか。
これと同じようなコンパクトエフェクターがあればいいのだが、どうも無理っぽい。
最近、エフェクター用のDSPボードみたいなのも出ているので、そういうので作れないかなどと考えている。買えば買ったで欲がでるのは分かってはいるのだが。
ということで、つなぎ込んでみる。
で、ZOOMのMS-50Gの方はT Screamとアンプの組み合わせで使っていたのだけれど、T ScreamのかわりにDI-01を入れてみた。
これが案外いい。
DI-01は元々すごくトランジスタっぽい音をしていると私は思っているのだが、高音弦の鳴りが気に入っている。
ところが低音減は、こう独特のブーミーさがあって、ここがとても使いにくい点だった。
なので、BOSSのオーバードライブと並列のユニットを作ったりしていたのだが、MS-50Gのアンプシミュと組み合わせる事で、音作りの幅が広がったという感じ。
まあ、今どきこんなディストーションを使っている人もまずいないのだろうが、これはオールドというより、私が一番最初に購入したエフェクターということで、いわばルーツみたいなものなのである。
自作のループセレクターは結局歪み系だけで埋まりそうだ。
空間系はGT-8で賄えるのだが、実は欲しいエフェクトはYAMAHAのSPX90の中にある。
無論、SPX-90は持っているのだが、なんとかこれだけ再現できないかなと思っている。
使いたいのはSTEREO FLENGEという左右それぞれ設定できるフランジャーで、これをショートディレイみたいな感じでかける。
歪み系に組み合わせると松原正樹風のサウンドと言ったらわかってもらえるだろうか。
これと同じようなコンパクトエフェクターがあればいいのだが、どうも無理っぽい。
最近、エフェクター用のDSPボードみたいなのも出ているので、そういうので作れないかなどと考えている。買えば買ったで欲がでるのは分かってはいるのだが。
なんか中途半端な通し番号だけれど、ちょっと間が空いたので、一旦経過報告。
コードがまだ完成していない。
EEPROMからの読み取り結果をLCDに表示するように組んでいたのだが、うまくいかず悩んでいた。
I2C通信がうまく行っていないのかなと思ってボードも組直したのだが、結果としてはLCD表示が常に別の表示で更新されていただけだった。
で、次にバンクセレクトのボタンを追加。
最初はバンクナンバーをA~Eみたいな表示にしようと思い、4桁セグメントLEDの一番左の桁に表示させようと思ったのだが、I2C通信のライブラリ上ではどうも桁を分けて使うのは難しい感じ。
なので、1~5という表示に変更。
ちょっと見づらいけれど、コードは簡単になる。
ここでバンクナンバー+フットスイッチナンバーの組み合わせでEEPROMのアドレスナンバーを決める。
これは単純で1バンクのスイッチ1で1。順番にナンバーを振って25まで。
バンクナンバーは、スイッチ1個なので、ナンバーアップのみ。5まで行くと次は1に戻る。
ここで、最初はバンクを切り替えるとスイッチも1に戻るという仕様を考えていたのだが、何もしないことにした。
というのは、スイッチが3ならバンクアップでの1~5までスイッチ3が連続する。
一種のチェインが組めるということに気がついて、このままにしようと思い立った。
あまり使うかどうかは疑問だが、ダメならコードを書き換えればいい。
ここまでで一山超えた感じ。
メカニカルな部分は出来た。
後は表示機構。
今はLCDに表示させているが、これを4桁の7セグメントLEDに集約したい。
既にI2C通信での表示は確認済み。
(I2C通信の2ピンだけでLCDとEEPROMとセグメントLCDが動く!)
表示は、選択中のバンクナンバー+プログラムチェンジナンバーなのだが、各スイッチにプログラムチェンジナンバーを割り当てるときに、可変抵抗を回した時だけ表示を割り込ませたい。
今ここで詰まっている。
その前に、可変抵抗でのプログラムチェンジナンバーの設定の際、抵抗値の読み取りがふらついて、表示が安定しないのを改善していた。
探ってみたのだが、この辺はあまり情報がなく、移動平均とか幾つか手法はあるようだったけれど、難しいので、もうちょっと簡単にできないかと考えていた。
でもって、要するにふらつくのは最後の一桁なので、読み取り値をmap関数で0~127(プログラムチェンジナンバーに割り当てる数値)にしていたところを、0~12700にして、LCDに表示するところでこれを100で割って小数点以下切り捨てるというコードに変更。
なんかこれでいい感じだ。
今日はここまでたどりついたというところ。
可変抵抗を回したことを検知するところがどうもうまくいかない。
変数が増えているので、ちょっと間が空くと頭がなじむまでに時間がかかってしまう。
今週はなんとか頑張ってみようと思う。
部品も足りていないのは先に書いたが、なんとバンクナンバー用のフットスイッチも忘れていた。
週末は再び秋葉原か。
--追記--
可変抵抗のふらつき対策だが、単独のコードではなんとなく効いているように見えるものの、本コードの中で動作させてみると電圧が安定しないのかぜんぜんダメ。
何か別なことを考えないと。
コードがまだ完成していない。
EEPROMからの読み取り結果をLCDに表示するように組んでいたのだが、うまくいかず悩んでいた。
I2C通信がうまく行っていないのかなと思ってボードも組直したのだが、結果としてはLCD表示が常に別の表示で更新されていただけだった。
で、次にバンクセレクトのボタンを追加。
最初はバンクナンバーをA~Eみたいな表示にしようと思い、4桁セグメントLEDの一番左の桁に表示させようと思ったのだが、I2C通信のライブラリ上ではどうも桁を分けて使うのは難しい感じ。
なので、1~5という表示に変更。
ちょっと見づらいけれど、コードは簡単になる。
ここでバンクナンバー+フットスイッチナンバーの組み合わせでEEPROMのアドレスナンバーを決める。
これは単純で1バンクのスイッチ1で1。順番にナンバーを振って25まで。
バンクナンバーは、スイッチ1個なので、ナンバーアップのみ。5まで行くと次は1に戻る。
ここで、最初はバンクを切り替えるとスイッチも1に戻るという仕様を考えていたのだが、何もしないことにした。
というのは、スイッチが3ならバンクアップでの1~5までスイッチ3が連続する。
一種のチェインが組めるということに気がついて、このままにしようと思い立った。
あまり使うかどうかは疑問だが、ダメならコードを書き換えればいい。
ここまでで一山超えた感じ。
メカニカルな部分は出来た。
後は表示機構。
今はLCDに表示させているが、これを4桁の7セグメントLEDに集約したい。
既にI2C通信での表示は確認済み。
(I2C通信の2ピンだけでLCDとEEPROMとセグメントLCDが動く!)
表示は、選択中のバンクナンバー+プログラムチェンジナンバーなのだが、各スイッチにプログラムチェンジナンバーを割り当てるときに、可変抵抗を回した時だけ表示を割り込ませたい。
今ここで詰まっている。
その前に、可変抵抗でのプログラムチェンジナンバーの設定の際、抵抗値の読み取りがふらついて、表示が安定しないのを改善していた。
探ってみたのだが、この辺はあまり情報がなく、移動平均とか幾つか手法はあるようだったけれど、難しいので、もうちょっと簡単にできないかと考えていた。
でもって、要するにふらつくのは最後の一桁なので、読み取り値をmap関数で0~127(プログラムチェンジナンバーに割り当てる数値)にしていたところを、0~12700にして、LCDに表示するところでこれを100で割って小数点以下切り捨てるというコードに変更。
なんかこれでいい感じだ。
今日はここまでたどりついたというところ。
可変抵抗を回したことを検知するところがどうもうまくいかない。
変数が増えているので、ちょっと間が空くと頭がなじむまでに時間がかかってしまう。
今週はなんとか頑張ってみようと思う。
部品も足りていないのは先に書いたが、なんとバンクナンバー用のフットスイッチも忘れていた。
週末は再び秋葉原か。
--追記--
可変抵抗のふらつき対策だが、単独のコードではなんとなく効いているように見えるものの、本コードの中で動作させてみると電圧が安定しないのかぜんぜんダメ。
何か別なことを考えないと。
今回は最初からタイトルを通し番にしたのだが、どうも牛の歩みである。
もう少しまとめてから書いてもいいのだが、間が空き過ぎるのと備忘の為にちょっとずつということで。
さて、部品も揃ってきたが、スイッチサイエンスの通販で購入した7セグメントLEDが届いたのでまずはテスト。
https://www.switch-science.com/catalog/1639/
4桁のセグメントLEDとI2C通信変換する基板のセットになっている。
これはハンダ付けが必要ということで、久しぶりにコテを持つ。
基板に実装されているチップの裏側にLEDユニットを付ける。
先に接続用の4つのピンをハンダ付けをしたのだが、これは失敗。
LEDユニットをハンダ付けする時に、ピンが邪魔で、ハンダゴテがチップに当たりそうになってしまう。
チュートリアルを見ると、やはり順番は逆だった。
次はライブラリをダウンロードして読み込む。
https://github.com/adafruit/Adafruit-LED-Backpack-Library
とりあえず空いているArduinoにつなぎ込んで、ライブラリに付いて来るサンプルのコードを試す。
ライブラリはもう一つ必要。
https://github.com/adafruit/Adafruit-GFX-Library
サンプルはsevensegというやつ。
ハンダの熱が心配だったが問題なく動く。
カウンタ式の表示がまぶしい。
輝度が結構あるので、何かしらフィルターが必要な感じ。
どこかでそんなことを読んだ気もするのだが。
実装の際に工夫してみようと思う。
ケースも、こちらはマルツパーツの通販でタカチのMB-15というタイプを購入。
サイズは75×55×325。
もうひとまわり小さいのが理想だけれども、今回はこれでいく。
部品はほぼ揃ったので、まずはコードを仕上げないと。
まとまった時間がなかなか取れないのでもう少し時間がかかりそう。
ケースの加工も、また角穴をあけねばならないので、お手軽にはいかなそうだ。
ただ、前回に比べれば穴の数はかなり少ないので、そこが救いか。
そういえば、電源スイッチを買い忘れていた。
前回使ったのと同じものが使いたいが、型番がわからない。
通販で探せるだろうか。
まあ頑張ってみよう。
もう少しまとめてから書いてもいいのだが、間が空き過ぎるのと備忘の為にちょっとずつということで。
さて、部品も揃ってきたが、スイッチサイエンスの通販で購入した7セグメントLEDが届いたのでまずはテスト。
https://www.switch-science.com/catalog/1639/
4桁のセグメントLEDとI2C通信変換する基板のセットになっている。
これはハンダ付けが必要ということで、久しぶりにコテを持つ。
基板に実装されているチップの裏側にLEDユニットを付ける。
先に接続用の4つのピンをハンダ付けをしたのだが、これは失敗。
LEDユニットをハンダ付けする時に、ピンが邪魔で、ハンダゴテがチップに当たりそうになってしまう。
チュートリアルを見ると、やはり順番は逆だった。
次はライブラリをダウンロードして読み込む。
https://github.com/adafruit/Adafruit-LED-Backpack-Library
とりあえず空いているArduinoにつなぎ込んで、ライブラリに付いて来るサンプルのコードを試す。
ライブラリはもう一つ必要。
https://github.com/adafruit/Adafruit-GFX-Library
サンプルはsevensegというやつ。
ハンダの熱が心配だったが問題なく動く。
カウンタ式の表示がまぶしい。
輝度が結構あるので、何かしらフィルターが必要な感じ。
どこかでそんなことを読んだ気もするのだが。
実装の際に工夫してみようと思う。
ケースも、こちらはマルツパーツの通販でタカチのMB-15というタイプを購入。
サイズは75×55×325。
もうひとまわり小さいのが理想だけれども、今回はこれでいく。
部品はほぼ揃ったので、まずはコードを仕上げないと。
まとまった時間がなかなか取れないのでもう少し時間がかかりそう。
ケースの加工も、また角穴をあけねばならないので、お手軽にはいかなそうだ。
ただ、前回に比べれば穴の数はかなり少ないので、そこが救いか。
そういえば、電源スイッチを買い忘れていた。
前回使ったのと同じものが使いたいが、型番がわからない。
通販で探せるだろうか。
まあ頑張ってみよう。
今日は久しぶりに秋葉原で部品調達。
先般から悩んでいたフットスイッチだが、千石電商で金属製のモーメンタリ型のスイッチを見つける事ができた。
実装してみないと使い勝手は分からないけれど、なかなか良さそうだ。
ただ、値段が1個640円と割高(エフェクターに使えるようなフットスイッチは総じて割高)。
型番はフジソクの8Y1021と読み取れる。
これで作業が進みそうだ。
それとシリアル通信(i2C通信)のセグメントLEDも見つけられず、これはスイッチサイエンスから通販で購入することにした。
基板はどうしようか考えているが、三端子レギュレータを買って来たので、クガデンのAB基板で組もうと思っている。
さて、あとはケースだけ。
スイッチボックス状のものになるので、横長のアルミケースにしたいのだが、秋葉原ではいいものが見つけられなかった。
で、通販で買う事にしたのだが、メーカーサイトでは寸法表のみで、とてもわかりずらい。
結局、マルツパーツの通販でタカチのMB型アルミケース【MB-15】を選択。
汎用品の無骨なデザインだが、今回はまあいい。
アルミ型材の端材でもあれば、もっといいものが出来そうだけれども。
中古で入手していたYAMAHAのディストーション、DI-01だが、この機種は外部電源をつなぐところが特殊で普通の9Vの電源アダプターはそのままではつなぐことができない。6ピンのコネクタなのだが、今までピッタリのコネクタを見つけられなかった。今回ようやく適合品を見つける。
これはH6P-SMF-AA10というもの。マルツパーツで買う事ができた。
ピンヘッダも忘れずに買っておく。
このタイプのコネクタはピンヘッダの使い勝手がいい。
DI-01に付いているコネクタの、左右端から2番目のピンがそれぞれがプラスとマイナスになっているので、間違えないように買って来た6ピンのコネクタにピンを差し込む。
これで外部電源9Vが使えるようになる。
ただ、電源サプライの方をちゃんとしないといかん。
先般から悩んでいたフットスイッチだが、千石電商で金属製のモーメンタリ型のスイッチを見つける事ができた。
実装してみないと使い勝手は分からないけれど、なかなか良さそうだ。
ただ、値段が1個640円と割高(エフェクターに使えるようなフットスイッチは総じて割高)。
型番はフジソクの8Y1021と読み取れる。
これで作業が進みそうだ。
それとシリアル通信(i2C通信)のセグメントLEDも見つけられず、これはスイッチサイエンスから通販で購入することにした。
基板はどうしようか考えているが、三端子レギュレータを買って来たので、クガデンのAB基板で組もうと思っている。
さて、あとはケースだけ。
スイッチボックス状のものになるので、横長のアルミケースにしたいのだが、秋葉原ではいいものが見つけられなかった。
で、通販で買う事にしたのだが、メーカーサイトでは寸法表のみで、とてもわかりずらい。
結局、マルツパーツの通販でタカチのMB型アルミケース【MB-15】を選択。
汎用品の無骨なデザインだが、今回はまあいい。
アルミ型材の端材でもあれば、もっといいものが出来そうだけれども。
中古で入手していたYAMAHAのディストーション、DI-01だが、この機種は外部電源をつなぐところが特殊で普通の9Vの電源アダプターはそのままではつなぐことができない。6ピンのコネクタなのだが、今までピッタリのコネクタを見つけられなかった。今回ようやく適合品を見つける。
これはH6P-SMF-AA10というもの。マルツパーツで買う事ができた。
ピンヘッダも忘れずに買っておく。
このタイプのコネクタはピンヘッダの使い勝手がいい。
DI-01に付いているコネクタの、左右端から2番目のピンがそれぞれがプラスとマイナスになっているので、間違えないように買って来た6ピンのコネクタにピンを差し込む。
これで外部電源9Vが使えるようになる。
ただ、電源サプライの方をちゃんとしないといかん。
ちょっと忙しくって、ぜんぜん進捗はしていないのだが、今一番の問題は、フットスイッチの選定。
これは足で踏むことになるので、ちょっと小型の、金属製のスイッチを使用したいのだが、必要なスイッチはオルタネイトタイプでなくてモーメンタリタイプ。
ところが、オルタネイトタイプはいくつもあるのだが、モーメンタリタイプの金属製のものがどうも見つけられない。
どうしてもその手のスイッチが使いたいので、オルタネイトタイプのスイッチで、想定の動作をさせることを検討中。コードを工夫すればなんとかなると思っているのだが。
MIDIループセレクターにZOOMのMS-50Gをつないで、ちょっと音作りを試行錯誤。
空間系ではなく、歪み系としての使用を試している。
BOSSのGT-8のループに入れているのだけど、どうも入力ゲインのキャパが広くなくて、GT-8のセンドのレベルを結構下げないと、なんというのか歪みがデジタル特有の飽和したような状態になってしまう。
で、GT-8のループのセンドのレベルを60~70くらいに絞る。
GT-8でループの前にコンプ、ループの後ろにアンプシミュとリバーブ。
MS-50Gの砲はそんなにまだたくさん試していないのだが、ある程度自分なりに好みの音が出せるようになってきた。
基本はT Screamとアンプの組み合わせ。アンプはFD COMBOを選んで、CAB=OFF、OUT=STACKFRONTから音作りをしている。
そこそこ粘りのある音が出ている。
ただ、高音弦はいいのだが、巻弦の音がどうも固い。
EQで調整すればもう少しいい感じになるかも。
GT-8でアンプシミュは通るのだから、MS-50Gでもアンプシミュをかませるのは、まあ邪道と言えば邪道なのかもしれないが、単体のストンプでは出せない部分を加えるというのか、そんなイメージ。
ただ、CABやOUTの選択でかなり音のキャラが変わってしまうので、これはもう色々試してみるしかない。
とは言え、好みの音なんて結構日によって変わるものなので、あまり細かくやろうとは思っていない。
この好みの音が変わるという点については、おそらく音量の違いが一番の原因だろうと思う。
耳の感受性ももちろん変わっているとは思うのだが、毎日弾く中で一番変化しているのが音量だろうと思うので。オケの音量とのバランスでもまた変わるだろう。
元々空間系に期待してMS-50Gを購入したのだが、単体でのマルチ使用はともかく、ひとつのエフェクターとして考えると、この歪み系の音作りの幅の広さは案外重宝するかも知れない。
GT-8も音作りの幅は大きいが、MS-50Gは手軽にエディットできるところがいい。
それでも、選択肢は結構な数になるので、まあやはり色々試してみるということにはなるんだけれども。
マルチエフェクターも、使った事がないエフェクトは、やはりほとんど使わないという感じになる。
昔ほどあれこれと音の幅を広げると言う事に頓着しなくなった。
ひとつかふたつ、本当に気に入った音が出ればいいという。
これは、しかし終わりのない探求かもしれない。
これは足で踏むことになるので、ちょっと小型の、金属製のスイッチを使用したいのだが、必要なスイッチはオルタネイトタイプでなくてモーメンタリタイプ。
ところが、オルタネイトタイプはいくつもあるのだが、モーメンタリタイプの金属製のものがどうも見つけられない。
どうしてもその手のスイッチが使いたいので、オルタネイトタイプのスイッチで、想定の動作をさせることを検討中。コードを工夫すればなんとかなると思っているのだが。
MIDIループセレクターにZOOMのMS-50Gをつないで、ちょっと音作りを試行錯誤。
空間系ではなく、歪み系としての使用を試している。
BOSSのGT-8のループに入れているのだけど、どうも入力ゲインのキャパが広くなくて、GT-8のセンドのレベルを結構下げないと、なんというのか歪みがデジタル特有の飽和したような状態になってしまう。
で、GT-8のループのセンドのレベルを60~70くらいに絞る。
GT-8でループの前にコンプ、ループの後ろにアンプシミュとリバーブ。
MS-50Gの砲はそんなにまだたくさん試していないのだが、ある程度自分なりに好みの音が出せるようになってきた。
基本はT Screamとアンプの組み合わせ。アンプはFD COMBOを選んで、CAB=OFF、OUT=STACKFRONTから音作りをしている。
そこそこ粘りのある音が出ている。
ただ、高音弦はいいのだが、巻弦の音がどうも固い。
EQで調整すればもう少しいい感じになるかも。
GT-8でアンプシミュは通るのだから、MS-50Gでもアンプシミュをかませるのは、まあ邪道と言えば邪道なのかもしれないが、単体のストンプでは出せない部分を加えるというのか、そんなイメージ。
ただ、CABやOUTの選択でかなり音のキャラが変わってしまうので、これはもう色々試してみるしかない。
とは言え、好みの音なんて結構日によって変わるものなので、あまり細かくやろうとは思っていない。
この好みの音が変わるという点については、おそらく音量の違いが一番の原因だろうと思う。
耳の感受性ももちろん変わっているとは思うのだが、毎日弾く中で一番変化しているのが音量だろうと思うので。オケの音量とのバランスでもまた変わるだろう。
元々空間系に期待してMS-50Gを購入したのだが、単体でのマルチ使用はともかく、ひとつのエフェクターとして考えると、この歪み系の音作りの幅の広さは案外重宝するかも知れない。
GT-8も音作りの幅は大きいが、MS-50Gは手軽にエディットできるところがいい。
それでも、選択肢は結構な数になるので、まあやはり色々試してみるということにはなるんだけれども。
マルチエフェクターも、使った事がないエフェクトは、やはりほとんど使わないという感じになる。
昔ほどあれこれと音の幅を広げると言う事に頓着しなくなった。
ひとつかふたつ、本当に気に入った音が出ればいいという。
これは、しかし終わりのない探求かもしれない。
作成に随分時間がかかってしまったMIDIループセレクターだが、ようやく短めのMIDIケーブルを調達したので、BOSS GT-8のループ部分につなぎ込み、GT-8のMIDI OUTからMIDI INへケーブルをつないだ。
4つのループには自作のディストーションユニット、BOSS BD-2、ZOOM MS-50G、自作のトレブルブースターをとりあえずつないである。
GT-8のパッチを切り替えると、MIDIループセレクターが切り替わる。
MIDIループセレクターの方のパッチは、1~128のプログラムチェンジナンバーにそれぞれ設定ができるので、GT-8との組み合わせも自由度が高い。
元々そういう構想だったんだけれども、これはかなり便利。作ったかいがあった。
使い道としては、持ち出し用のシステムとして組むというのがもう一つ。
実は、何度かスタジオに入る機会があったのだけれど、GT-8はさすがに気軽に持ち出せないというのを実感した。
そこでZOOM MS-50Gの出番となる訳だが、これは切替に難があって、BOSS DB-2と組み合わせて使ったのだけれど、システムとしてはいまひとつ。
そこで、MS-50GのMIDI切替をできるようにとあれこれやっていたのは既に書いた。
で、今、これと組み合わせるべくMIDIスイッチャーを作っている。
出来上がると、5パッチ+MS-50Gの切替ができるシステムになる。
MIDIで切り替わるので、MS-50Gはループに入れてもいいし、外に出してもいい。
今のところ、他にはBOSS BD-2、ヤマハDI-01くらいを(コンパクトエフェクターは今このくらいしかない)入れてボードを組めば、持ち出し用としては一応十分かなと思っている。
最終的には、ZOOMのMS-70CDRを調達して組み合わせると、MSシリーズは直接MIDIコントロールするとすれば、6+6+4で16のエフェクターを自由に組み合わせる事ができる。
まあ、実質MSシリーズで6エフェクターをフルに使う事はないと思うが、それでも、BOSS GT-8並のシステムが組める。
練習に持ち出すには十分。あとは音が作れるかどうか。
家ではGT-8主体のシステムだが、持ち出し用のシステムは、キモになるのがやはりアンプシミュレーターのあるMS-50G。
ただ、やはりGT-8とは毛色の違う音が出るので、そこが気に入るかどうか。
いや、実は家でも、歪み系はGT-8よりは自作のディスト-ションユニットの方が気に入っているので、それをつなげるのが理想なのだが、これはこれでラックタイプででかいので、ボードに組むという感じではない。
あとは音量調節的なものが欲しい感じだ。
結局、昔使っていたシステムに近いものに段々なってゆく。
4つのループには自作のディストーションユニット、BOSS BD-2、ZOOM MS-50G、自作のトレブルブースターをとりあえずつないである。
GT-8のパッチを切り替えると、MIDIループセレクターが切り替わる。
MIDIループセレクターの方のパッチは、1~128のプログラムチェンジナンバーにそれぞれ設定ができるので、GT-8との組み合わせも自由度が高い。
元々そういう構想だったんだけれども、これはかなり便利。作ったかいがあった。
使い道としては、持ち出し用のシステムとして組むというのがもう一つ。
実は、何度かスタジオに入る機会があったのだけれど、GT-8はさすがに気軽に持ち出せないというのを実感した。
そこでZOOM MS-50Gの出番となる訳だが、これは切替に難があって、BOSS DB-2と組み合わせて使ったのだけれど、システムとしてはいまひとつ。
そこで、MS-50GのMIDI切替をできるようにとあれこれやっていたのは既に書いた。
で、今、これと組み合わせるべくMIDIスイッチャーを作っている。
出来上がると、5パッチ+MS-50Gの切替ができるシステムになる。
MIDIで切り替わるので、MS-50Gはループに入れてもいいし、外に出してもいい。
今のところ、他にはBOSS BD-2、ヤマハDI-01くらいを(コンパクトエフェクターは今このくらいしかない)入れてボードを組めば、持ち出し用としては一応十分かなと思っている。
最終的には、ZOOMのMS-70CDRを調達して組み合わせると、MSシリーズは直接MIDIコントロールするとすれば、6+6+4で16のエフェクターを自由に組み合わせる事ができる。
まあ、実質MSシリーズで6エフェクターをフルに使う事はないと思うが、それでも、BOSS GT-8並のシステムが組める。
練習に持ち出すには十分。あとは音が作れるかどうか。
家ではGT-8主体のシステムだが、持ち出し用のシステムは、キモになるのがやはりアンプシミュレーターのあるMS-50G。
ただ、やはりGT-8とは毛色の違う音が出るので、そこが気に入るかどうか。
いや、実は家でも、歪み系はGT-8よりは自作のディスト-ションユニットの方が気に入っているので、それをつなげるのが理想なのだが、これはこれでラックタイプででかいので、ボードに組むという感じではない。
あとは音量調節的なものが欲しい感じだ。
結局、昔使っていたシステムに近いものに段々なってゆく。
以前紹介したZOOM MS-50GのMIDIコントローラーについては、ブレッドボード上での構成までだったけど、ちょっと欲張ってレガシーMIDIとUSB MIDIでプログラムチェンジを出力できるフットコントローラーとして実装しようかと思っている。
仕様は以下の通り。
・Arduino UNOを使用する
・プログラムチェンジを出力するスイッチは5つ
・5つのスイッチに任意のプログラムチェンジナンバーを設定できる
・5つのプログラムチェンジナンバーを設定したバンクを
2~5程度設ける
・MIDI INを設け、MIDI OUTからスルーして出力する
・USB MIDIとレガシーMIDIに同時に信号を出力する
・プログラムチェンジナンバーはLCDかセグメントLEDで表示する
これは、実は前回作ったMIDIループセレクターと組み合わせて使う事を念頭に置いている。
ブレッドボード上で作業を始めたのだが、またまたいくつかの壁に直面する。
USB MIDI出力はUSBホストシールドを使うコードが既に出来ているので、そのまま流用するとして、スイッチ7つ、LED5つ、可変抵抗1つ、この他表示用のLCDないしはセグメントLED,、メモリ用のEEPROM、あとMIDIのIN OUTにそれぞれピンが必要だ。
USBホストシールドがArduinoのD7~D13ピンを使ってしまうので、単純に考えると全然ピンが足りない。
そこでLCDはI2C通信のものを使う。これで信号線は2ピンで済む。EEPROMもI2C通信なので、これは同じラインでOK、のはず。
MIDI IN、OUTはD0、D1ピン、プログラムチェンジナンバー設定用の可変抵抗と、書き込み用スイッチで各1ピン、バンク切替スイッチで1ピン。
でもって、プログラムチェンジナンバーを設定する5つのスイッチと識別用のLED5つが問題となる。
これで10ピン使うと全然足りないので、工夫をする。
参考にさせて頂いたのはこのサイト。なるほどなあと思った。
http://www.yk.rim.or.jp/~kamide/music/chordhelper/hardware/CAmiDion-1.html
スイッチの検出を抵抗値で読み取る方法で、5つのスイッチが1ピンで済む。
これでぎりぎり納まるという感じ。
I2C通信のLCDを使うのは初めてだったが、ライブラリを公開して下さっている方もあり、比較的容易に使うことができた。ありがとうございます。
http://ore-kb.net/archives/195
前回作ったMIDIセレクターでEEPROM、可変抵抗まわりは作っているので、この辺はまあ大丈夫。
問題は5つのスイッチとLEDであった。
5つのスイッチはタクトスイッチ、実装の際にはプッシュスイッチになる訳だが、選択中の1つだけLEDには点灯してもらうことになる。
そして、1つ押したら他の4つのLEDは消えるという仕組みにしないといけない。
MIDIセレクターで作ったのは4つそれぞれON OFFできる仕組みだったが、この排他的なスイッチの処理はあまり参考になるサイトがなく、あれこれやっていた。
やっとなんとか形にはなったが、コードは冗長になってしまった。
こんな感じ。
アナログピン2でスイッチからの抵抗値を読み取って、1~5のナンバーを出力する出力する関数を別途作っている。
設定部分ははしょっているので、参考程度に。
また、自信のあるコードでもないので。
さらに、電源ON時に初期設定として1つON状態にしたいのだが、これもまた試行錯誤。
それでもなんとか目的の動作は検証できたので、さらに作り込みを続けてゆく。
しかし、アイデアを比較的容易に形にできてしまうArduinoは、やはり素晴らしいと思う。
そうそう時間もとれないので、ちょっとずつになってしまうが、またご報告申し上げたい。
仕様は以下の通り。
・Arduino UNOを使用する
・プログラムチェンジを出力するスイッチは5つ
・5つのスイッチに任意のプログラムチェンジナンバーを設定できる
・5つのプログラムチェンジナンバーを設定したバンクを
2~5程度設ける
・MIDI INを設け、MIDI OUTからスルーして出力する
・USB MIDIとレガシーMIDIに同時に信号を出力する
・プログラムチェンジナンバーはLCDかセグメントLEDで表示する
これは、実は前回作ったMIDIループセレクターと組み合わせて使う事を念頭に置いている。
ブレッドボード上で作業を始めたのだが、またまたいくつかの壁に直面する。
USB MIDI出力はUSBホストシールドを使うコードが既に出来ているので、そのまま流用するとして、スイッチ7つ、LED5つ、可変抵抗1つ、この他表示用のLCDないしはセグメントLED,、メモリ用のEEPROM、あとMIDIのIN OUTにそれぞれピンが必要だ。
USBホストシールドがArduinoのD7~D13ピンを使ってしまうので、単純に考えると全然ピンが足りない。
そこでLCDはI2C通信のものを使う。これで信号線は2ピンで済む。EEPROMもI2C通信なので、これは同じラインでOK、のはず。
MIDI IN、OUTはD0、D1ピン、プログラムチェンジナンバー設定用の可変抵抗と、書き込み用スイッチで各1ピン、バンク切替スイッチで1ピン。
でもって、プログラムチェンジナンバーを設定する5つのスイッチと識別用のLED5つが問題となる。
これで10ピン使うと全然足りないので、工夫をする。
参考にさせて頂いたのはこのサイト。なるほどなあと思った。
http://www.yk.rim.or.jp/~kamide/music/chordhelper/hardware/CAmiDion-1.html
スイッチの検出を抵抗値で読み取る方法で、5つのスイッチが1ピンで済む。
これでぎりぎり納まるという感じ。
I2C通信のLCDを使うのは初めてだったが、ライブラリを公開して下さっている方もあり、比較的容易に使うことができた。ありがとうございます。
http://ore-kb.net/archives/195
前回作ったMIDIセレクターでEEPROM、可変抵抗まわりは作っているので、この辺はまあ大丈夫。
問題は5つのスイッチとLEDであった。
5つのスイッチはタクトスイッチ、実装の際にはプッシュスイッチになる訳だが、選択中の1つだけLEDには点灯してもらうことになる。
そして、1つ押したら他の4つのLEDは消えるという仕組みにしないといけない。
MIDIセレクターで作ったのは4つそれぞれON OFFできる仕組みだったが、この排他的なスイッチの処理はあまり参考になるサイトがなく、あれこれやっていた。
やっとなんとか形にはなったが、コードは冗長になってしまった。
こんな感じ。
//--------------------------------------------------------
swValue1 = analogRead(analogInPin2);//sw抵抗からの読み取り
swNo1 = swNumber(swValue1);
//スイッチセクション
//*******************
switch (swNo1){
case 1:
swCount1 += 1;
if (swCount1 == 10) {
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN5, LOW);
swCount2 = 0;
swCount3 = 0;
swCount4 = 0;
swCount5 = 0;
}
delay(1);
break;
case 2:
swCount2 += 1;
if (swCount2 == 10) {
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN5, LOW);
swCount1 = 0;
swCount3 = 0;
swCount4 = 0;
swCount5 = 0;
}
delay(1);
break;
case 3:
swCount3 += 1;
if (swCount3 == 10) {
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN5, LOW);
swCount1 = 0;
swCount2 = 0;
swCount4 = 0;
swCount5 = 0;
}
delay(1);
break;
case 4:
swCount4 += 1;
if (swCount4 == 10) {
digitalWrite(LED_PIN4, HIGH);
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN5, LOW);
swCount1 = 0;
swCount2 = 0;
swCount3 = 0;
swCount5 = 0;
}
delay(1);
break;
case 5:
swCount5 += 1;
if (swCount5 == 10) {
digitalWrite(LED_PIN5, HIGH);
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
swCount1 = 0;
swCount2 = 0;
swCount3 = 0;
swCount4 = 0;
}
delay(1);
break;
default:
break;
}
アナログピン2でスイッチからの抵抗値を読み取って、1~5のナンバーを出力する出力する関数を別途作っている。
設定部分ははしょっているので、参考程度に。
また、自信のあるコードでもないので。
さらに、電源ON時に初期設定として1つON状態にしたいのだが、これもまた試行錯誤。
それでもなんとか目的の動作は検証できたので、さらに作り込みを続けてゆく。
しかし、アイデアを比較的容易に形にできてしまうArduinoは、やはり素晴らしいと思う。
そうそう時間もとれないので、ちょっとずつになってしまうが、またご報告申し上げたい。