とれすけのブログ -13ページ目

とれすけのブログ

IT、Mac、音楽、ひとり旅、メイカーズ、その他ゆるゆると。
Slackでバンドサポート

少し間があいてしまった。
何もしていなかった訳ではなく、むしろ製作は随分進んでいる。

まず、単独動作させる為の電源を作った。
エフェクターでは標準の9Vの電源アダプターを使うという前提で、降圧型のDC-DCコンバーターSI-8050Sというものを使う。
組み立てキット買ったつもりだったのだが、チップとコイルしか入っていないリテールパッケージだった。なので、追加の部品を買って、電源基盤を組む。
ヒートシンクが必要ということで、なるべく小型に作ったのだが、ケースに入るギリギリの高さになってしまった。
電源基盤

ケースの加工も仕上げに入る。
LCD用の角穴の仕上げはヤスリがけしかないのだが、ガイドを使ってなるべくきれいに仕上げる。
ガイドになる何かいいものはないかなと探していると、金具売り場で鉄の平版を見つけた。多分、2×4材をつなぐ金具だ。1個160円ほどと手頃。これと、アルミのL型材を買って帰る。
鉄板を両側からクランプし、ヤスリをかけて、ようやく角穴は完成。角穴加工は、やはり手間がかかるが、ハンドニブラを使って、思っていたほどの大変さではなかった。昔はドリル穴をつなげて四角にしていたから、大変だというイメージが染み付いてしまっていた。
とりあえずケース加工は今はここまで。あと、電源スイッチの穴と基板取り付けのネジ穴は配置を決めてから。配置を決めるには、まず基板を作り上げないと、ということで、基板を作る為にはATmega328のチップにスケッチを書き込まなければならない。
その為には、コードを完成させて検証しなければならない。と、色々と錯綜してきた。

コードは完成し検証もできたので、まずATmega328へのスケッチの書き込みに取り組む。
ところが、これに結構時間を取られてしまった。
ネットの情報は新旧錯綜していて、ブートローダの書き込み、スケッチの書き込みと、Arduinoを書き込み装置にするところまではわかったものの、ブレッドボードの配線もいくつかパターンがあり、思っていたようには進まなかった。
まず、私としてはブートローダは必要なく、スケッチだけ書き込めればいいということで、配線をし、書き込んでみた。エラーにはならなかったものの、オレンジ色のコメントがついて、ちょっと内容がよくわからない。しかし、検証するには書き込んだATmega328を実装してみなくてはならない。いきなり本番用のプログラムを書き込んでしまったものだから、本番用の配線をしてみないとわからない。
で、やってみたのだが、LCD等には通電するものの、まったく動かない。
で、気を取り直して、今度はLEDの点滅だけのスケッチを書き込んでみる。
検証用のボードに差すと、LEDは点灯する。だが、点滅はしない。
しばらくするとLEDも消えてしまった。
これは失敗だなと、あれこれ配線やら調べてみたが、どうにもわからない。
すると、いつの間にかLEDが点いている。
そのまま見ていると、どうも大変遅い速度で点滅をしている。

16MHzの水晶発振子は接続をしているのだが、クロックが正常に動いてないらしい。
うっかり表面実装用の発振子を買って来てしまったので、足を引っ張り出して使っていたのだが、足が細くて短いので、接触不良かと思って、ICソケットに差してみても結果は変わらず。
ネットでいろいろ検索してみたが、どうにも答えは見つからなかった。
とにかく今度はブートローダを書き込んでみようということで、参考にさせて頂いたのがこのサイト。

http://neo-sahara.com/wp/2014/06/26/某海外通販で購入したarduino-uno-r3-互換機で遊ぶ-その06-ブー/

これの通り、10μFの電解コンデンサーをつなぎ、抵抗もあらためて10KΩのものに差し替え(目が悪いので、もはや抵抗のカラーコードが読めないのだ)、ブートローダを書き込んでみる。
これでうまくいった。続けてスケッチを書き込む。
検証用のボードに差し替えてみる。
おお、ちゃんと点滅するではないか。
ようやく成功、ということで、もうひとつのATmega328に本番用のスケッチを書き込んでみると、エラーも起こらず書き込む事ができた。
うまくいった配線は下記の通り。
書き込みボード

ここまで来たところで、一旦この書き込み用の回路をモジュール用基板に実装することにした。
出来上がりはこの通りで、配線が中空であまり美しくもなく、LEDも後から気づいて付けたので、もう場所がなく、一個しか付けられなかった(付けたのは13番ピンのLED。書き込み中はTXとRXのLEDが点滅する。モジュールを乗せるとArduino本体のLEDがまったく見えなくなる)が、これで気軽に石が焼ける。
書き込みモジュール

最初、私は誤解していて、ブートローダの書き込みと、スケッチの書き込みはちょっと違った配線が必要だと思っていて、ブートローダの書き込みを省いたのだが、何のことはない、同じ回路でブートローダの書き込みもスケッチの書き込みもできる。
ブートローダの書き込みも、現在のArduinoIDEのバージョンなら特別なファイルも必要なく、IDEだけで書き込める。出来上がってみれば配線もまあそれほど難しいものではないので、正しい情報を見つけることの方が大事かも知れない。


Arduino ブログランキングへ

エフェクター ブログランキングへ


回数が増えて来たので、タイトルも内容別に再編しようと思う。
さて、昨日は初詣のついでに秋葉原に行って追加の買い物を済ませて来た。
次に作ろうと思っている卓上MIDIチェンジャー?用の部品も購入。
今日は、リレーモジュールとケースの加工を行った。

リレーモジュールの方は、先日検証した回路を愚直に4つ並べたもの。
信号ラインをつなぐ為の端子をつけて格好はついたが、実際の接続を考えるとちょっと無駄だったかもしれない。
ユニバーサル基板の配線はやはりなかなか大変。
何度も動作確認を行って、ようやく完成。



ケースの方は、まだ基板が全部出来上がっていなかったが、タカチのYM200というケースを見切り発車で購入してきた。大きさが理想に近かったし、逆にこれぐらいでないと、いやにばかでかい装置になってしまう。
しかし、基板を並べてみて、やはりかなりぎりぎりの印象。
スイッチ類のレイアウトははっきり言ってNG。
4つの選択スイッチは、一応足でも操作できるという想定をしていたが、このレイアウトでは無理だった。それと、MIDIスルーも付ける予定だったが、この段階では諦めざるを得ない。
穴あけ加工は、やはり工賃を考えて自分でやることにした。大体、レイアウトが決まらない状況では外注は難しい。
ということで、昔使っていたリーマーを引っ張り出して来た。
こういうものが普通に出て来るところがやはり普通ではない。
ドリルで穴をあけ、リーマーで広げてゆく。
問題の角穴は、秋葉原で購入して来たハンドニブラに初挑戦。
思っていたよりは簡単だった。
だが、寸法通りに切り出すのはひどく難しい。
ヤスリがけが必要だが、きれいに仕上げる為にはガイド用の治具が必要だ。
何か考えないと。
MIDI端子用の穴はリーマーの径では足りないのでハンドニブラであける。MIDIのジャックは外側から止めるタイプなので穴はいい加減でいい。
ビス穴は現物合わせであけてゆく予定。
ひとまず難関は終わったというところ。



ここまでやって、電源のことを忘れていたのに気づく。
外部電源で9V受け、内部5Vなので電源回路がいる。ということで、降圧型のDC-DCコンバータを昨日買って来たのだが、基板付きのキットだと思っていたものが、コンバータとコイルのみという製品だった。あと、1000μFの電解コンデンサーとヒートシンクが必要ということで、基板も自分で組まないといけない。いや、しかしスペースが厳しい。
今回は、ブレッドボード型基板2枚になる予定で、1枚にシフトレジスタ、EEPROM、MIDI受信回路が載り、もう一枚にマイコン、スイッチ回路を載せる予定だったが、スイッチ回路は抵抗だけなので、これを追い出して電源部を載せるしかない。
いずれにせよ、追加の部品を購入しないと先へ進まない。

今後の予定としては、EEPROMの実装とプログラム、電源の実装、ケースの追加加工、ケースへの部品の取り付けと配線とまだ先は長い。
その前に、やはり、Arduino本体の内蔵はやめて書き込み済みのATmega328を実装することにした。なので、焼き込み用の装置をセッティングしなければならない。
次のモノでもそれが前提なので、頑張るしかない。

ここまで来て恐縮だが、私の場合、利便性に重きを置いているので、音に関してはどうなるかわからない。トゥルーバイパスなるものにあまり興味はないのだが、回路としては一応そういう回路にしている。ただ、ノイズまわりは実際未検証だし、使用しているリレーもそう上等なものではない。ということで、作ったはいいが使えないものになる可能性はある。
色々試しながらやっているので無駄にお金はかかっている。

Arduino ブログランキングへ


リレー回路の検証を行った。
やはり、4連のリレーモジュールはピンがOUTPUTモードの時にLOWで作動する。
これが仕様なのだろうか。
これではLEDと同期しないのでリレードライバ回路を作って検証してみる。
備忘として回路の結線を残しておく。

MIDI IN

これでLEDの動作と同じくHIGHでリレーが作動する。
ユニバーサル基板でリレー用ボードを作らねば。


Arduino ブログランキングへ

今日はちょっと一息。

Arduinoをいじり出してから、電子工作を始めた頃のことを思いま出す。
たしか小学生の頃だったと思うが、あまりいい思い出はない。
失敗ばかりで、結局長続きしなかった。
当時、アンプのようなものを作りたくて、あれこれやってみたのだが、なにしろ知識がない上に、党時は情報源も少なかった。
失敗と言えば、15Vの直流電源が必要ということで、15V電池(そういうのがあった)をつないでみたけど動作しなかったり、回路図のアースの記号を文字通り接地する為に、庭に金属棒を埋め込んで、それにつないでみたり。
そして、今気がついたけれど、トランジスタだ。
アンプと言えばトランジスタという時代。しかし、私はうまく使いこなせなかった。
トランジスタの回路記号だと、ベースは真ん中に見える。実際のトランジスタは、平面から見て右側がベースだったりするのだが、どうも真ん中をベースだと思い込んでいたような気がする。
そんな失敗ばかりだったが、学生時代にバンドをやっていたことから、一事はエフェクター作りに励んだ。多少なりとも子どもの頃のチャレンジは活かされたと言うべきだろう。
当時ギターマガジンに連載されていた大塚明氏のハンドメイドプロジェクトは出色の製作記事だった。あれに出会わなかったら、今でもこんなことはやっていないだろう。
プリント基板の作成の仕方からケース加工まで、至れり尽くせりだった。
ただ、回路の方は私には難しく、そのまま作るだけだったが。
一時は、ギターよりも作る方に熱中していた。
実際に使えるところが、私の物作りの原点かな。

ケースの角穴あけも、ハンドニブラなるものがあれば出来そうだということが分かった。今月はそろそろ予算も尽きて来たので、本を買うかハンドニブラを買おうか迷っている。


サウンド・クリエイターのための電気実用講座/洋泉社

¥3,132
Amazon.co.jp

ホーザン ハンドニブラー K-88/ホーザン

¥3,400
Amazon.co.jp


エフェクター ブログランキングへ
今日はシフトレジスタとLCDの部分をブレッドボードから基板にパーツを移してハンダ付け。
目が悪いので苦労する。
プリント基板はブレッドボードと同じ配線の奴。
空間的には無駄が多いが、分かりやすいのと、ユニバーサル基板に比べればハンダの数が少なくて済む。
これ以上細かい配線は目の悪い私にはちょっと厳しい。

ついでにMIDI INの回路を組む事にした。
先日探しまわったフォトカプラのTLP552を実装する。
比較的簡単に組めるので、単一目的で使うならMIDIシールドを買わずに、これだけ組めばいい。
配線は下記の通り。

MIDI IN

参考にさせて頂いたサイト

http://qiita.com/emahub/items/8209b5606934ab60cc6f

http://spinelify.blog.fc2.com/blog-entry-10.html


フォトカプラは左下が1番。
コンデンサは積層タイプを使っている。
テストもOKだった。

そろそろケースの事も考えている。
LCD用の角穴は、さすがに加工が手に余るので、加工サービスを使おうと思っているが、CADのデータが必要だったり、なかなかお手軽にはいかない。
まずボードが出来て、配置が決まらないとサイズも決められない。
なので、基板への実装を進めていく。
次はリレーボードの検証に入って行こう。



Arduino ブログランキングへ


エフェクター ブログランキングへ
ループセレクターは、ケースの発注段階で色々情報を探している。丸穴数個なら自分でもなんとかなるが、丸穴で17個、角穴が2個とさらにネジ穴が必要で、とても自分では手に余る。なので、加工できる業者を探している。

今構想しているプロジェクトを少し。

1.プログラマブルディレイ
これはディレイ専用チップ PT2399を使ったディレイ回路をArduinoでコントロールするもの。
設定3つとモードの切替をメモリに記憶する。MIDI受信での切替に対応する。
BOSS GT-8の後ろにつなぐことを想定して、ステレオインステレオアウトを目指す。
3段階の出力音量切替もできたら実装する。

2.昔作った、BOSS OD-1、IBANEZ TS-9、YAMAHA DI-01+BOSS BF-1を並列に接続した1Uラックのエフェクトモジュールを、やはりデジタル制御に改造して復活させる。

3.卓上MIDI切替機
 ボタン3つで、小型を目指す。
 BlueTooth化も検討する。

一応、これくらいでシステムはほぼ理想のもの?になる予定。
技術的にはハードルはそう高くない。
あとは、お金と時間だ。
だけど、こういうのを考えている時が、一番楽しい。


あけましておめでとうございます。
今年も良い年でありますように。

さて、昨年中に届いていたリレーモジュールを早速つなぎ込んでみた。
動くには動いたのだが、なんか動作が想定と逆だ。ブレッドボード上のLEDが消えるとリレーの方がカチッと鳴ってLEDが点灯する。これが仕様か?何か間違っているのだろうか。想定と違っていて戸惑っている。ちょっと後回し。

前回LCDを使えるようにしたのには訳があって、これからやろうとするMIDI受信やEPROMとの送受信を確認する為に、LCDがあった方が都合がいい。
私は最初、シリアルモニタでモニターしながら作っていたのだが、結局、シリアルモニタの結果ではLCDにどう反映されるのかわからなかったし、最後はLCDに表示するのだから、最初からLCDが使えた方が構築は楽だ。

今回はMIDI受信の部分を作る。
ネットではMIDI送信の情報はそれなりにあるのだが、MIDI受信の情報はあまりなく、このサイトを参考にさせて頂いた。

http://ichirowo.com/2011/05/arduino-midi-library/

コードもプログラムチェンジのところだけ利用させて頂いている。
MIDI送信はArduinoと直結できるが、受信の方はフォトカプラを介した接続になる。最終的には先日買って来たパーツでこの部分は作るつもりだが、構築段階ではスイッチサイエンスのMIDIシールドを利用する。

https://www.switch-science.com/catalog/387/

MIDI受信

MIDI受信を利用する場合は、Arduino IDEとのやり取りに干渉してしまうので、プログラム書き込み時にはMIDIシールドについているスイッチを切り替える。こういうこともあるので、ちょっと値段は高いがMIDIシールドの利用が楽。但し、モジュールは自分で組み立てないといけない。ハンダ付けが30カ所くらいだが、そう難しくはない。
さて、接続だが、受信だけで考えればVccとGNDとRXデータの3ピンだけつなげばいい。
VccとGNDはブレッドボードと接続し、RXデータはArduinoの0番ピンにつなぐ。RXと記載のあるところ。
そして、MIDIプログラムチェンジ信号を出力できる機器をMIDI INに接続する。

コードは以下の通り。


//---------------------------------------------
//シフトレジスタでLCD駆動
#include <ShiftRegLCD123.h>
const byte dataPin = 6; // SR Data from Arduino pin 10
const byte clockPin = 7; // SR Clock from Arduino pin 11
const byte enablePin = 8; // LCD enable from Arduino pin 12
ShiftRegLCD123 srlcd(dataPin, clockPin, enablePin, SRLCD123);

//--------------------------------------------
//MIDI設定
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();

//-------------------------------------------

void setup()
{
  //シフトレジスタでLCD開始
  srlcd.begin(16,2);//LED表示桁,行を設定
  srlcd.clear();//LCD初期化

  //MIDI開始
  MIDI.begin(); // Launch MIDI, by default listening to channel 1.
}
//------------------------------------------

void loop()
{
  //---------------------------------------------------------------------------
  //MIDI受信セクション
  int MIDIdataROM;

  uint8_t MIDIdata1;
  if (MIDI.read()) // Is there a MIDI message incoming ?
  {
    switch(MIDI.getType()) // Get the type of the message we caught
    {
      case midi::ProgramChange: // If it is a Program Change,
      MIDIdata1 = MIDI.getData1(); //プログラムNo.


      //MIDIデータs受信の表示セクション
      //桁揃え*********************
      char readpgno[16];
      int MIDIdata2;
      MIDIdata2 = MIDIdata1 + 1;
      sprintf(readpgno, "Read %03d",MIDIdata2);

      srlcd.setCursor(0,0);
      srlcd.print(readpgno);
      //****************************
    }
  }
  //MIDI受信セクションの終わり
}



MIDIライブラリを使うので、読み込んで欲しい。
MIDIチャンネルは1で、MIDIプログラムチェンジの信号を送る。
私はYAMAHAのMFC-1(古いね!)からデータを送った。
表示はこんな感じ。



シンプルなプログラムなので、読んでもらえば内容は分かると思うが、キモはsprintfという関数。
MIDIプログラムチェンジ信号はデータとしては0~127の数値で送られてくる。実際MIDI機器で使われているプログラムチェンジナンバーは1~128なので、まず受信データに単純に1を足して表示を合わせる。
そしてLCD表示だが、そのまま流すと、数値はちゃんと表示される。ただ、常に左詰めで表示される為、127の後に20を送信すると207みたいな表示になってしまう。その都度消せばいいのだが、どうせなら視認性も考えて桁を揃えたい。そこで利用するのがsprintfという関数。1なら001という風にちゃんと桁を揃えてくれる。
この調子で、スイッチの状態もLCDに表示できるようにする。
表示の仕方だが、わかりやすく0か1かで表示するように考える。
すべてOFFなら0000、全てONなら1111という感じだ。
桁揃えを使えば簡単に出来そうな気がするが、EPROMとのデータのやりとりもあり、そう簡単ではなかった。
その辺はまた次回。


Arduino ブログランキングへ


エフェクター ブログランキングへ


さて、LCDについて。
今回使用するのは16文字×2行表示できるタイプ。
私が使用したのはバックライトなしのSC1602BS*Bと白抜き文字タイプのSC1602BBWB。
ピン配置は同じで、どちらも同じように使える。
ただ、白抜きタイプはバックライトを点灯しないとまったく文字が見えない。バックライトは裏側でジャンパーを一つと、抵抗を一つ自分で付けないといけないのでちょっと面倒。但し、別にバックライト用のピンを必要としないのはありがたい。
ピン配置は以下の通り。

1.VDD 5V
2.VSS 0V
3.Vo コントラスト
4.RS
5.R/W
6.E  イネーブル
7.DB1 データ

14.DB7

シフトレジスターを使って3ワイヤー接続の場合、このうち1~6、11~14のピンを使うことになる。

SC1602BBWB

シフトレジスターは74HC595というタイプを使った。
ネットでの情報が頼りなので、よく使われているものを使う。

配線は図の通り。
LCDは図だとピンが横に並んでいるけど、左から1~14まで。15,16は使わない。
いいパーツの図がなかったので番号で読み替えて欲しい。



シフトレジスタ74HC595は切り欠きが左側。ので、左下が1番ピンになる。
ブレッドボード真ん中にあるのがコントラスト調整用の半固定抵抗。あまり考えずに手元にある500Ωを使用。

3ワイヤー接続には専用のライブラリが必要になるのだが、私の環境でうまくいったのはこのサイトの情報。

http://code.google.com/p/shiftreglcd123/wiki/Hardware#3-wire_SRLCD123

タブのdownloadからライブラリがダウンロードできる。
Arduino IDEにこのライブラリを読み込む。
スケッチメニューからAdd Libraryとやればいい。
サイトの下部に配線図もあるので参考に。
最初なかなかうまくいかなくて困っていたが、このサイトのおかげで無事うまくいった。感謝の他はない。これで標準のLCDライブラリと同じように扱える。

サンプルのスケッチ。

#include <ShiftRegLCD123.h>

const byte data = 6;
const byte clock = 7;
const byte enable = 8;

ShiftRegLCD123 srlcd(data, clock, enable, SRLCD123);

void setup()
{
  srlcd.begin(16,2);
  srlcd.clear();
 srlcd.print("HELLO, WORLD!");
}

void loop()
{
  srlcd.setCursor(0,1);
   srlcd.print("test");
    delay(1000);
    srlcd.setCursor(0,1);
   srlcd.print(" ");
    delay(1000);
}



こんな感じになる。



色々試してみて欲しい。

さて、スイッチングの機構とLCD表示の準備はできた。
これからやるのは、スイッチを押した情報をLCDに表示することと、それにプログラムチェンジナンバーを紐付けて表示すること。プログラムチェンジナンバーは可変抵抗で選ぶようにする。
それから、MIDIを受信したら、そのプログラムチェンジナンバーを表示することと、それに紐付いたスイッチのON-OFFをEPROMから読み出して表示すること。
先は長いが、楽しみながらやっていこう。

参考にさせて頂いたサイト。

http://sunhayato.co.jp/blog/?p=581

http://isa.asablo.jp/blog/2014/10/09/7454355

http://code.google.com/p/arduinoshiftreglcd/


ArduinoでMIDIループセレクターその1で使っていた抵抗は全部1kΩです。



8ビットシフトレジスタ 74HC595N 10個セット Arduino、Raspberry Piに/oem

¥価格不明
Amazon.co.jp


Arduino ブログランキングへ


エフェクター ブログランキングへ


インターネット・コンピュータ ブログランキングへ
さて、次に表示用のLCDについて。
最初に使用したLCDはSC1602BS*Bというバックライトなしのタイプ。
これは左側に2連の14ピン配置になっている。
標準の接続通りにやれば、労無くしてLCDに表示はできた。
しかし、標準のピン接続だと、Arduino側のデータピンを全部で6つ使ってしまう。
構想では、あとメモリにEPROMを使用する予定なので、そうすると、最終的にピンが足りなくなってしまう。
そこでネットで調べて、どうやらシフトレジスタなるものを使えば、2ピンないしは3ピンで接続できるということが分かった。

シフトレジスタは74HC595というものを使う。
ライブラリを追加すれば、使えるようになる。
と簡単に言ってしまうが、実際はここで結構悩んだ。

というところで、今日はまえ振りのみ。
時間がなくなってしまった。
ちなみに、実機用に購入したLCDは、ちょっとおごって白抜きタイプのバックライト付きLCD、SC1602BBWB。
ピン配置は同じだ。
しかし、これの配線が結構やっかい。
最初のLCDはテスト用なので、ピンソケットが表面になるようにハンダ付けしたが(ピンはオスかメスかをハンダ付けする必要がある)、実機用は裏面にする必要がある。
ネットの情報だと、HD44780などのタイプを使った例が多い。これはピンが水平に並んでおり、これだとブレッドボードに差して使う事ができる。
そこらへんも考慮して購入した方がいい。
ピン配置の違う機種もあるので、特にVccは間違えないように注意。
一応、実機用のLCDも無事に動いた。
バックライトを点けるけるのにもハンダ付けが必要なのはちと面倒。

今日はここまで。




DC 5V 1602 16×2 HD44780 キャラクタ LCD ディスプレイ モジュール .../GAOHOU

¥価格不明
Amazon.co.jp



LCD 液晶 ディスプレイ モジュール 16×2 バックライト付き for Arduino/emoishop

¥価格不明
Amazon.co.jp


Arduino ブログランキングへ


エフェクター ブログランキングへ


インターネット・コンピュータ ブログランキングへ
今日は部品調達に秋葉原へ。
ガード下のお店だけ揃うかなと思ったけれど、お店が往年と比べると減ってしまっていて、ちょっと厳しい。MIDI受信に使うフォトカプラのTLP552というタイプが見つからない。
とりあえず、秋月電子まで行って見る。
ここは、混んでました。
もうここで一式そろえてしまおうと部品表を店員さんに出すが、今日は混んでいるので、自分でさがしてくれと。
いや、抵抗から何から全部探し出したけど、フォトカプラのTLP552だけは無い。
こうなると、後はラジオデパートである。2階の奥まった店舗に、ありました。
あと、ネジ止めに使うスペーサー。以前はガード下にネジ屋さんがあって、豊富な在庫で簡単に揃ったけれど、今はもうない。これもラジオでパートの中でようやく見つけた。
結局、最初からラジオデパートに行った方が良かった感じ。

さて、ループセレクターの続き。
まずはスイッチまわりを考える。
要求されるのは、スイッチを押す度にON、OFFが切り替わるようなスイッチ。
これは物理スイッチではMIDI受信時に反映できなくなるので、タクトスイッチとスケッチの組み合わせで実現する。

こんな感じ。




配線図

ブレッドボード1

で、スケッチ。


#define LED_PIN1 12
#define SW_PIN1 14
#define LED_PIN2 11
#define SW_PIN2 15
#define LED_PIN3 10
#define SW_PIN3 16
#define LED_PIN4 9
#define SW_PIN4 17



int swVal1 = 0;
int swCount1 = 0;
boolean ledState1 = false;
int swVal2 = 0;
int swCount2 = 0;
boolean ledState2 = false;
int swVal3 = 0;
int swCount3 = 0;
boolean ledState3 = false;
int swVal4 = 0;
int swCount4 = 0;
boolean ledState4 = false;
int swVal5 = 0;
int swStatus1 = 0;
int swStatus2 = 0;
int swStatus3 = 0;
int swStatus4 = 0;



void setup()
{
  pinMode(LED_PIN1, OUTPUT);
  pinMode(SW_PIN1, INPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(SW_PIN2, INPUT);
  pinMode(LED_PIN3, OUTPUT);
  pinMode(SW_PIN3, INPUT);
  pinMode(LED_PIN4, OUTPUT);
  pinMode(SW_PIN4, INPUT);
}


void loop()
{
  swVal1 = digitalRead(SW_PIN1);

  if (swVal1 == HIGH) {
    swCount1 += 1;
  } 
  else {
    swCount1 = 0;
  }

  if (swCount1 == 10) {
    ledState1 = !ledState1;
  }

  if (ledState1) {
    digitalWrite(LED_PIN1, HIGH);
  } 
  else {
    digitalWrite(LED_PIN1, LOW);
  }

  delay(1);
  //2
  swVal2 = digitalRead(SW_PIN2);

  if (swVal2 == HIGH) {
    swCount2 += 1;
  } 
  else {
    swCount2 = 0;
  }

  if (swCount2 == 10) {
    ledState2 = !ledState2;
  }

  if (ledState2) {
    digitalWrite(LED_PIN2, HIGH);
  } 
  else {
    digitalWrite(LED_PIN2, LOW);
  }

  delay(1);

  //3
  swVal3 = digitalRead(SW_PIN3);

  if (swVal3 == HIGH) {
    swCount3 += 1;
  } 
  else {
    swCount3 = 0;
  }

  if (swCount3 == 10) {
    ledState3 = !ledState3;
  }

  if (ledState3) {
    digitalWrite(LED_PIN3, HIGH);
  } 
  else {
    digitalWrite(LED_PIN3, LOW);
  }

  delay(1);

  //4
  swVal4 = digitalRead(SW_PIN4);

  if (swVal4 == HIGH) {
    swCount4 += 1;
  } 
  else {
    swCount4 = 0;
  }

  if (swCount4 == 10) {
    ledState4 = !ledState4;
  }

  if (ledState4) {
    digitalWrite(LED_PIN4, HIGH);
  } 
  else {
    digitalWrite(LED_PIN4, LOW);
  }


}





参考にさせて頂いたサイト

http://level0.kayac.com/2009/04/getting_started_arduino_02.php

https://www.facebook.com/permalink.php?story_fbid=288371881304899&id=199993436809411



【永久保証付き】Arduino Uno/スイッチサイエンス

¥価格不明
Amazon.co.jp

Arduino拡張キット/TechShare(テックシェア)

¥価格不明
Amazon.co.jp


Arduino ブログランキングへ


エフェクター ブログランキングへ


インターネット・コンピュータ ブログランキングへ