|
本帖最后由 Blanboom 于 2013-6-2 13:32 编辑
制作 MakeyMakey,论坛里已经有比较简单的做法:http://www.geek-workshop.com/thread-1192-1-1.html 。其实,制作方法还可以继续简化:去掉USB部分,直接用串口向电脑发送数据,在电脑上将串口信号转为按键输入即可。
制作方法:
按原帖连接USB部分以外的电路,然后下载下面的的程序: - //串口版 MakeyMakey
- //by Blanboom, http://blanboom.org/a-easier-way-to-make-a-makeymakey.diy
- //修改自:[url]http://www.geek-workshop.com/thread-1192-1-1.html[/url]
- int InData1 = 0, InData2 = 0, InData3 = 0, InData4 = 0, InData5 = 0, InData0 = 0; //触摸输入值暂存
- int TouchSensitivity = 80; //触摸灵敏度。0~1023,越大越不灵敏
- void setup()
- {
- Serial.begin(9600);
- }
- void loop()
- {
- //读取所有引脚电压值,并且由于上拉电阻原因,
- //默认所有引脚为最高电平1023,通过触摸拉低引脚电平。
- //所以数值由1024-analogRead(A0);
- InData0 = 1024 - analogRead(A0);
- InData1 = 1024 - analogRead(A1);
- InData2 = 1024 - analogRead(A2);
- InData3 = 1024 - analogRead(A3);
- InData4 = 1024 - analogRead(A4);
- InData5 = 1024 - analogRead(A5);
- //按照各种可能触发键盘事件
- if(InData0 >= TouchSensitivity)
- {
- Serial.write('a'); //发送字符,支持 ASCII 码
- }
- if(InData1 >= TouchSensitivity)
- {
- Serial.write('s');
- }
- if(InData2 >= TouchSensitivity)
- {
- Serial.write('d');
- }
- if(InData3 >= TouchSensitivity)
- {
- Serial.write('w');
- }
- if(InData4 >= TouchSensitivity)
- {
- Serial.write(' ');
- }
- if(InData5 >= TouchSensitivity)
- {
- Serial.write(13); //Enter
- }
- delay(100); //可根据实际情况增加或减少
- }
复制代码
然后下载运行附件中的串口键盘转换工具即可。不过这个软件只支持 ASCII 字符,所以上下左右键无法发送。
当然也可以让串口输出 MIDI 信号,代码如下: - //MakeyMakey MIDI 版本
- //by Blanboom, http://blanboom.org/a-easier-way-to-make-a-makeymakey.diy
- //参考了以下两个程序:
- //http://www.instructables.com/id/Arduino-Xylophone/
- //http://www.geek-workshop.com/thread-1192-1-1.html
- //2013.6.1
- byte PadNote[6] =
- {60,61,62,63,64,65}; //定义音符
- int MaxPlayTime[6] =
- {90,90,90,90,90,90}; //最长播放时间
- int Hitavg = 127; //音量,127最大
- int TouchSensitivity = 80; //灵敏度,越大越不灵敏
- int Midichannel = 9; //MIDI通道,9为打击乐器
- boolean activePad[6] =
- {0,0,0,0,0,0}; //记录对应音符是否正在播放
- int pinPlayTime[6] =
- {0,0,0,0,0,0}; //记录对应音符播放时间
- int inData = 0;
- void setup()
- {
- Serial.begin(9600); //串口波特率,根据 MIDI 设备调整
- }
- void loop()
- {
- for(int pin = 0; pin < 6; pin++)
- {
- inData = 1024 - analogRead(pin);
- if(inData >= TouchSensitivity)
- {
- if((activePad[pin] == false))
- {
- MIDI_TX(144,PadNote[pin],Hitavg); //发送音符
- pinPlayTime[pin] = 0;
- activePad[pin] = true;
- }
- else
- {
- pinPlayTime[pin] = pinPlayTime[pin] + 1;
- }
- }
- else if((activePad[pin] == true))
- {
- pinPlayTime[pin] = pinPlayTime[pin] + 1;
- if(pinPlayTime[pin] > MaxPlayTime[pin])
- {
- activePad[pin] = false;
- MIDI_TX(144,PadNote[pin],0);//停止播放该音符
- }
- }
- delay(10); //根据情况增加或减少
- }
- }
- //发送 MIDI 信号
- void MIDI_TX(byte MESSAGE, byte PITCH, byte VELOCITY)
- {
- int status1;
- status1 = MESSAGE + Midichannel;
- Serial.write(status1);
- Serial.write(PITCH);
- Serial.write(VELOCITY);
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|