2013-04-04 4 views
5

最近、私はArduino(Uno)に手を上げました。私は何か不思議でした。Arduino信号をPCの入力として使用しますか?

私はスピーカー用の外部音量チェンジャーを持っていないので、ポテンショメーターをArduinoに接続し、それを使ってボリュームをコントロールしてみましょう(Windowsの場合)。しかし、それは可能ですか?

多分Visual C、C++(または何か「マルチプラットフォーム」言語)を使ってArduinoピンの値を読み取るには?そして、それを使ってWindowsで音量レベルを設定します(Linuxでも可能です)。

私はあなたが使用している場合ので、それは、可能かもしれないと思った:

Serial.println(analogRead([pin with potentiometer])); 

あなたは(USB経由)パソコンにポテンショメータの値を取得することができます。 CやC++でこれらの値を読み取る方法はありますか?

私はCまたはC++を介してWindowsにボリュームを設定する方法を知っていますが、(Visual)CまたはC++スクリプトのポテンショメータの値を読み取る方法があるかどうかを知る必要があります。

+1

適切なCOMポートを開いて、PCとArduinoの間でシリアル通信を使用できます。 – helloworld922

答えて

6

間違いなく。そしてまったく同じ方法を使います:シリアル通信。私は素晴らしいWindowsの専門家ではないので、完全なWindowsの例は書けませんが、Unix(Linux、OS Xなど)で始めることができるいくつかのスニペットがあります:

コードArduinoの:コンピュータ上の

#define POT_PIN 1 

void setup() 
{ 
    Serial.begin(9600); // 9600 baud is more than enough 
} 

void loop() 
{ 
    int pot = analogRead(POT_PIN); 
    unsigned char byte = (pot + 2) >> 2; // round and divide by 4 
    Serial.write(pot); 
    delay(100); // or do something useful 
} 

コード:

#include <termios.h> 

struct termios tio; 
memset(&tio, 0, sizeof(tio)); 

// Open serial port in mode `8N1', non-blocking 
tio.c_cflag = CS8 | CREAD | CLOCAL; 
tio.c_cc[VMIN] = 1; 
tio.c_cc[VTIME] = 5; 

int fd = open(device, O_RDONLY); 

cfsetospeed(&tio, B9600); 
cfsetispeed(&tio, B9600); 
tcsetattr(fd, TCSANOW, &tio); 

while (1) { 
    unsigned char byte; 
    read(fd, &byte, 1); 
    use_some_library_to_set_volume(byte); 
} 
+0

ありがとう!コードは機能しますが、正しい値を得る方法を見つけることができません。私のArduinoは今、 'Serial.println()'コマンドを使って0から100までの変数をpcに送り返します。しかし何らかの理由で、変数を 'std :: cout << byte;'で画面に表示すると問題なく動作しますが、ボリュームを設定するために使用できる変数にどのようにして取得できますか?私は多くのことを試みましたが、nothingsは今まで働いています...(私のArduinoコード:http://pastebin.com/JXetGJvh、My C++コード:http://pastebin.com/95K4R1jQ) – Jers

+0

@brickmasterj I Windows APIがシステムボリュームを設定するための機能を提供していることを確かめてください。 –

+0

私は知っている、そしてLinux上にはAPIもあるが、それは私の要点ではない。私のポイントは、印刷された変数を変数に代入してボリュームを設定することができないということです。コード中の 'byte'変数には、時間のほとんど、または改行が含まれています。しかし、私はそれを印刷する以外に、どのように処理するのか分かりません。 – Jers

0

考慮すべきいくつかのものがあります。

  • あなたはPCだけであなたの "ポテンショメータのArduino" を聞きたいです。任意のポートから受信した任意のランダムなUSBデータを聴取する必要はありません。あなたのデバイスにある程度ユニークなデータプロトコルを作成する必要があります。アナログの読みを迷惑メールにしただけでは、「123 128 133 145」のような生データが得られます。

  • Serial.whateverと入力すると、ArduinoがUART信号を吐き出している可能性があります。私はArduinoについては分かりませんが、うまくいけば、RS-232またはUSB回路を搭載していることを願っています。 PCに対応するポートが必要です。従来のRS-232 9ピンd-subコネクタは、最新のコンピュータではますます稀になるようになっています。 RS-232 to USBコンバータが必要な場合があります。

  • デバイスが接続されているCOMポートを判別する必要があります。 USBポートと従来のRS-232ポートは、PCに関する限り同じ働きをします。ユーザーが手動でポートを選択させるか、デバイスが接続されているポートを見つけるためのよりインテリジェントなアルゴリズムを設計します。

  • すべてのシリアルポートルーチンについてWindows APIを調べてください。ドキュメントと例はMSDNです。

関連する問題