編集履歴一覧に戻る
Kodのアイコン画像

Kod が 2021年01月24日10時13分02秒 に編集

コメント無し

記事種類の変更

+

製作品

本文の変更

しがない19歳です。 **特徴** スイッチ3つだけで全てのピアノの音を鳴らすことができる。PCのキーボードと連携していて、方向キーで鍵盤にある手の位置を動かすことができる。方向キーを左右に押せば左右に動き、上を押せばシャープを押せるようになる。 **作り方** 1 Arduinoでスイッチを読み取るプログラムとProcessingに読み取ったデータを送るプログラムを書く。 →1bitずつしか送れないため、スイッチから読み取ったデータ3bitを1bitにすることで遅延を減らすことに成功した。 2 Processing側で受け取るプログラムを書く。 3 Processing側で鍵盤の画像を貼り付け、手の位置も追加する。 動作の様子は以下を御覧ください。 → https://twitter.com/Kod75656124/status/1341589357447155712 **使用言語** Arduino Processing **これだけは言いたい。**

-

キーボードで鍵盤を押せば遅延も少ないし良くない?と思った人。たしかにそうですが、なんかスイッチで押したかったんです!!

+

キーボードで鍵盤を押せば遅延も少ないし良くない?と思った人。たしかにそうですが、なんかスイッチで押したかったんです!! ・ ・ ・ **Arduino** void setup() { Serial.begin(9600); } void loop() { int x = digitalRead(2); int y = digitalRead(4); int z = digitalRead(7); if (x == 0) { Serial.write('1'); } if (y == 0) { Serial.write('2'); } if (z == 0) { Serial.write('3'); } delay(5); } ・ ・ ・ **Processing** import processing.serial.*; Serial serial; import ddf.minim.*; import ddf.minim.signals.*; Minim minim; AudioOutput out; SineWave wave; PImage img; int x; int y=0; int z=0; int a=0; int num=0; void setup() { size(800, 800); img = loadImage("a.png"); serial = new Serial( this, Serial.list()[0], 9600 ); minim = new Minim(this); out = minim.getLineOut(Minim.STEREO); wave = new SineWave(0, 1.0, out.sampleRate()); out.addSignal(wave); } void draw() { background(0); image(img, 20, 20, 770, 750); fill(0, 0, 150); ellipse(70+num+z, 530+y, 30, 30); ellipse(165+num+z, 500+y, 30, 30); ellipse(260+num+a, 530+y, 30, 30); wave.setFreq(0); } void serialEvent(Serial port) { x = port.read(); println(x); delay(5); if (y==0) { if (num==0) { if (x==49) { wave.setFreq(523.25); } if (x==50) { wave.setFreq(587.32); } if (x==51) { wave.setFreq(659.25); } } if (num==95) { if (x==49) { wave.setFreq(587.32); } if (x==50) { wave.setFreq(659.25); } if (x==51) { wave.setFreq(698.46); } } if (num==190) { if (x==49) { wave.setFreq(659.25); } if (x==50) { wave.setFreq(698.46); } if (x==51) { wave.setFreq(783.99); } } if (num==285) { if (x==49) { wave.setFreq(698.46); } if (x==50) { wave.setFreq(783.99); } if (x==51) { wave.setFreq(880.00); } } if (num==380) { if (x==49) { wave.setFreq(783.99); } if (x==50) { wave.setFreq(880.00); } if (x==51) { wave.setFreq(987.77); } } if (num==475) { if (x==49) { wave.setFreq(880.00); } if (x==50) { wave.setFreq(987.77); } if (x==51) { wave.setFreq(1046.50); } } } else { if (x==49) { wave.setFreq(554.37); } if (x==50) { wave.setFreq(622.25); } if (x==51) { wave.setFreq(739.99); } } } void stop() { out.close(); minim.stop(); super.stop(); } void keyPressed() { if (key == CODED) { // コード化されているキーが押された if (keyCode == RIGHT) { // キーコードを判定 num+=95; } else if (keyCode == LEFT) { num-=95; } else if (keyCode == UP) { num=0; y=-150; z+=47; a+=147; } else if (keyCode == DOWN) { num=190; y+=150; z-=47; a-=147; } } }