2013-04-04 43 views
5

我最近得到了一個Arduino(Uno),我想知道一些東西。使用Arduino信號作爲PC的輸入?

我的揚聲器沒有外接音量調節器,所以我想,也許是將一個電位器連接到Arduino,然後用它來控制音量(在Windows中)。但那有可能嗎?

要使用Visual C,C++(或更多'多平臺'語言)讀取Arduino引腳的值?然後使用它在Windows中設置音量級別(以及是否可能在Linux中)。

我認爲這是可能的,因爲如果你使用:

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

你可以得到電位器的值到PC(通過USB)。那麼有沒有辦法在C或C++中讀取這些值?

我知道如何通過C或C++在Windows中設置音量,我只需要知道是否有方法在(Visual)C或C++腳本中讀出電位計的值。

+1

您可以打開相應的COM端口,並使用PC和Arduino之間的串行通信。 – helloworld922 2013-04-04 08:55:47

回答

6

當然。並使用完全相同的方法:串行通信。由於我不是一個偉大的Windows專家,所以我不能給你寫一個完整的Windows示例,但是這裏有一些片段可能讓你開始使用Unix(Linux,OS X等):

Code on 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;'將變量打印到屏幕上效果不錯,但是如何將它變成我可以用來設置音量的變量?我嘗試了很多東西,但目前爲止還沒有成功...(我的Arduino代碼:http://pastebin.com/JXetGJvh,我的C++代碼:http://pastebin.com/95K4R1jQ) – Jers 2013-04-04 11:35:38

+0

@brickmasterj I確定Windows API提供了設置系統音量的功能。 – 2013-04-04 11:40:14

+0

我知道,在Linux上也有一個API,但這不是我的觀點;我的觀點是,我無法將打印的變量放入一個變量中,然後我可以使用它來設置音量。因爲代碼中的'byte'變量大部分時間都不包含任何內容或換行符。但我不知道如何處理它,除了打印出來。 – Jers 2013-04-04 11:49:40

0

有一些事情要考慮。

  • 您希望PC只聽您的「電位計Arduino」。您不希望它聽到任何端口發送的隨機USB數據。有必要創建一個對您的設備有點獨特的數據協議。如果您只是垃圾郵件模擬讀數,您會收到一些原始數據,如「123 128 133 145」,這可能意味着任何內容,並來自任何類型的設備。

  • 當您鍵入Serial.whatever時,Arduino可能會吐出一個UART信號。我對Arduino並不瞭解,但希望它具有RS-232或USB電路板。在PC上需要一個匹配端口,傳統的RS-232 9針d-sub連接器在現代計算機上越來越少見。您可能需要一個RS-232到USB轉換器。

  • 您需要一個平均值來確定設備連接到哪個COM端口。就PC而言,USB端口和傳統的RS-232端口的工作原理是一樣的。要麼讓用戶手動選擇端口,要麼設計更智能的算法來查找設備連接的端口。

  • 研究所有串口例程的Windows API。文檔和示例MSDN