http://makeymakey.com/
だから私はアメリカ人を尊敬しています-才能が工業生産にどんな簡単なものでも提示し、もたらすことです。
私はビデオを見ました、私はみんなのためにうれしかったです。 しかし、どこかでかゆみが始まりました。 カットに登りました。 15分後(そのうち5分で煙が出た)、そのようなデバイスを手に入れました。
UPD> ...しばらくして。 グレープマルチタッチを実際に使用した新しいビデオ:-) C#ソフトウェアのソースコードとArduinの新しいスケッチを以下に示します。
実装はわいせつに簡単です。 公称値1〜50MΩの抵抗器のみが必要です(各接点に1つ)。 私は1つのママにカットを使用しました。その結果、タッチのみが検出されました。 あなたが10M以上を入れた場合-それは距離で、非接触で動作します。
スケッチでCapSenseライブラリを使用しました 。これはすべての作業を行うsossnoです。
配線図:

サンプルに基づいて、最も単純なスケッチをスケッチしました。
#include <CapSense.h>
#define SND_PIN 12 // ,
CapSense key1 = CapSense(7, 5); // 1 7- 5-
CapSense key2 = CapSense(7, 4); // 2 7- 4-
CapSense key3 = CapSense(7, 3); // 3 7- 3-
int range = 200; // , ,
byte button; //
int freq; //
void setup()
{
// 1- .
// ,
key1.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop()
{
long total1 = key1.capSense(30);
long total2 = key2.capSense(30);
long total3 = key3.capSense(30);
button = 0;
if (total1 > range) button |= 1;
if (total2 > range) button |= 2;
if (total3 > range) button |= 4;
switch (button) {
case 1: freq = 200; break ;
case 2: freq = 300; break ;
case 3: freq = 400; break ;
case 4: freq = 500; break ;
case 5: freq = 600; break ;
case 6: freq = 700; break ;
case 7: freq = 800; break ;
default : freq = 0;
}
freq? tone(SND_PIN, freq) : noTone(SND_PIN); //
}
* This source code was highlighted with Source Code Highlighter .
#include <CapSense.h>
#define SND_PIN 12 // ,
CapSense key1 = CapSense(7, 5); // 1 7- 5-
CapSense key2 = CapSense(7, 4); // 2 7- 4-
CapSense key3 = CapSense(7, 3); // 3 7- 3-
int range = 200; // , ,
byte button; //
int freq; //
void setup()
{
// 1- .
// ,
key1.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop()
{
long total1 = key1.capSense(30);
long total2 = key2.capSense(30);
long total3 = key3.capSense(30);
button = 0;
if (total1 > range) button |= 1;
if (total2 > range) button |= 2;
if (total3 > range) button |= 4;
switch (button) {
case 1: freq = 200; break ;
case 2: freq = 300; break ;
case 3: freq = 400; break ;
case 4: freq = 500; break ;
case 5: freq = 600; break ;
case 6: freq = 700; break ;
case 7: freq = 800; break ;
default : freq = 0;
}
freq? tone(SND_PIN, freq) : noTone(SND_PIN); //
}
* This source code was highlighted with Source Code Highlighter .
このようなものをフラッシュすると、グレープキーを持つアルデュインがHIDキーボードの役割を果たします(まだ試していません)。 しかし、このためには、すべてのArduinkaが適しているわけではなく、atmega8u2チップをUSBコントローラーとして使用する必要があります(新しいArduino UNOはまさにそれです)。 手にふさわしいものはありませんが、グレープキーボードからバンバーマンをオンラインでプレイしたかったのは残念です。その後(HIDを介した方がさらに興味深い)。
UPD>動作中のデバイスを手に入れ、かゆみを止め、リラックスしました。 私はMakiMakiについてより詳細に読みました-それが行われたことがarduinoにあったことが判明しました:-)
UPD>スピーカーをきしむのはおもしろくありません。娘のために楽しみをしなければなりません:-)次のトピックは、何か面白いことが起こった場合、それについてだけになるでしょう。
UPD>興味深いプロジェクト-atmega8u2を使用しない仮想USBキーボードが見つかりました。 私はそれを拾おうとする必要があります。
UPD>ハブロフスク市民への質問-COMポートを読み取り、何らかの形式でメッセージを受信し、キーを押すイベントを生成するソフトウェア(できればWindowsまたはクロスプラットフォーム)を教えてもらえますか? そして、私自身はすぐにそれをリベットしません。
UPD> arduino unoに緊急に注文し、HIDデバイスが箱から出された。 配達が失敗せず、今日配達されることを願っています。 バンバーマンをプレイするまで、落ち着きません(そして昨日からでも寝ませんでした)。
UPD>現在、8つのブドウが接続され、8つすべてが同時に処理されていますが、失敗しています。 5つの同時タッチが安定して機能します。 HIDは、明日のみの配達のために今日キャンセルされます:-(
UPD>だから...相棒のヒントの助けを借りて、C#で簡単な小さなソフトウェアの概要を説明することができました。 Arduino COMポートを読み取り、キーストロークを受け入れ、キーボードのキーストロークをエミュレートします。 今、私は8つすべてのブドウを拾って、新しいビデオを撮ろうとします。 最初にC#で何かを書いた:-)
UPD>ソースコード(VS2010、C#)。 私はC#でのんびりしないので、どうしてそれが起こったのか-それが起こった:-)ヒントをくれたレオナルドに感謝します。さもなければ、私は成功しなかったでしょう。 また、 InputSimulatorライブラリを指す GreenGo habruiserに感謝します。
Softinaは指定されたCOMポートをリッスンします(設定なし、ポート名はソース(COM11)にハードコードされています。これはArduinが使用可能なポートです。6つのキーのみが関与します。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using WindowsInput; using System.IO; using System.IO.Ports; namespace WindowsFormsApplication1 { public partial class Form1 : Form { System.IO.Ports.SerialPort newPort; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { newPort = new SerialPort("COM11", 57600, Parity.None, 8, StopBits.One); newPort.Open(); newPort.DataReceived += new SerialDataReceivedEventHandler(GetArduinoBytes); } public void GetArduinoBytes(object sender, SerialDataReceivedEventArgs e) { string data = newPort.ReadExisting(); string [] arr; int key = 0; arr = data.Split('\r'); try { key = Convert.ToInt32(arr[0]); } catch (System.FormatException) { // } int key1 = key & 1; int key2 = (key >> 1) & 1; int key3 = (key >> 2) & 1; int key4 = (key >> 3) & 1; int key5 = (key >> 4) & 1; int key6 = (key >> 5) & 1; int key7 = (key >> 6) & 1; int key8 = (key >> 7) & 1; if (key1 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.DOWN); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN); if (key2 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.UP); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.UP); if (key3 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.LEFT); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.LEFT); if (key4 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.RIGHT); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.RIGHT); if (key5 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.SPACE); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.SPACE); if (key6 == 1) WindowsInput.InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_Z); else WindowsInput.InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_Z); } } }
UPD>そして、これはArduinaの新しいスケッチです。 スピーカーはキーキーのプレイについてコメントしました。キーの状態をコンソールに転送するだけです。
#include <CapSense.h> #define SND_PIN 12 // , CapSense key1 = CapSense(5, 2); // 1 5- 5- CapSense key2 = CapSense(5, 3); // 2 5- 4- CapSense key3 = CapSense(5, 4); // 3 5- 3- CapSense key4 = CapSense(5, 6); // 4 5- 3- CapSense key5 = CapSense(5, 7); // 5 5- 3- CapSense key6 = CapSense(5, 8); // 6 5- 3- CapSense key7 = CapSense(5, 9); // 7 5- 3- CapSense key8 = CapSense(5, 11); // 8 5- 3- int range = 100; // , unsigned int button = 0, oldButton = 0; // int freq; // byte sense = 30; long total1, total2, total3, total4, total5, total6, total7, total8; void setup() { //key1.set_CS_AutocaL_Millis(0xFFFFFFFF); Serial.begin(57600); // } void loop() { total1 = key1.capSense(sense); total2 = key2.capSense(sense); total3 = key3.capSense(sense); total4 = key4.capSense(sense); total5 = key5.capSense(sense); total6 = key6.capSense(sense); total7 = key7.capSense(sense); total8 = key8.capSense(sense); button = 0; if (total1 > range) button |= 1; if (total2 > range) button |= 2; if (total3 > range) button |= 4; if (total4 > range) button |= 8; if (total5 > range) button |= 16; if (total6 > range) button |= 32; if (total7 > range) button |= 64; if (total8 > range) button |= 128; if (button != oldButton) { Serial.println(button); oldButton = button; } /* if (button) freq = button * 10 + 200; else freq = 0; if (freq) { Serial.println(freq); tone(SND_PIN, freq); } else noTone(SND_PIN); // */ }
UPD> MakiMakiについてのテレビ番組。 この「私のブドウのマルチタッチ」でプログラムに参加するよう招待されましたが、政治的な理由で拒否しなければなりませんでした:-)