Libraryを使うと、Arduino本体のみで複数の音が鳴らせるということなので使ってみました。<wiring_private.h>と書き換える必要があります。UNOで3音同時に鳴らす場合、Timer0を使ってしまうため、お手軽にdelay()関数やmillis()関数で音を鳴らす、ということができなくなります。Libraryも、内部でmillis()関数を呼んでいるのでやっぱり使えません。Libraryで使われているのがTimer2ですTimer1を使ったライブラリもあるようですが、これは使ったことないです)ここで、「外部からのMIDI入力に対応しよう」ではなく、「だったら2音でいいや」に妥協するのが私です。2音と言えばパワーコード。ラモーンズやピストルズなどのパンク・ロックで使われている、元になる音と5度の音(半音7つ分上)だけで構成されるコードです。アナログ入力(A0-A3)に半固定抵抗4つ付けて各種パラメータに使います。D8とD9はTone2音の出力。ここではそれぞれ1kΩの抵抗を挟んでミックスしてますが、別々で音を出すならステレオ出力っぽいことも出来ますね。回路図作る必要も無い気がしますが、こんな感じ。}}基本的にはArduinoでYMOクリックもどきとかArduinoで雷電風リズムマシンのスケッチと同じです。キモになってくるのが、アナログ入力からパラメータを設定しているset_note()関数。ルート音をAIN_ROOT(A2)から取ってます。前はシフト演算子とか使ってましたが、そんなに速度が必要なわけでもないし、何よりmap()関数便利すぎなので。ここではアナログ入力の0~1023を0~11に丸めています。0~11はそれぞれド~シ(C,C#,D,D#,E,F,F#,G,G#,A,A#,B)の音程になります(Freqs配列の中身は2オクターブ分の周波数です)。次のAIN_CHORD(A3)はルート音から半音いくつ分離れた音を一緒に鳴らすか。パワーコードに限定するなら「7」固定でいいんですが、まあせっかくなので、隣のフレット(鍵盤)を同時にならした場合から、1オクターブ上の音まで設定できるようにしました。AIN_TEMPO(A1)から取ってるのは、そのまんま1音1音を何ミリ秒鳴らすか。+1してるのは、0にした時にフリーズしちゃうので。AIN_LENGTH(A0)は、↑の1音の長さの内、実際に音を鳴らしている時間の割合です。Time、MMLで言うQコマンドです。実行してみると、かように珍妙な音が鳴ります。【ニコニコ動画】Arduinoでパワーコードを再生しようとしたら別物ができた......おかしいな、ラモーンズを目指していたはずなのに。