使用Arduino信号作为PC的输入?

Jer*_*ers 5 c c++ windows arduino

我最近得到了一个Arduino(Uno),我想知道一些事情.

我的扬声器没有外接音量调节器,所以我想,也许连接一个电位器到Arduino,然后用它来控制音量(在Windows中).但这可能吗?

使用Visual C,C++(或更多'多平台'语言)读取Arduino引脚的值?然后使用它在Windows中设置音量级别(如果在Linux中也可以).

我认为这可能是有可能的,因为如果你使用:

Serial.println(analogRead([pin with potentiometer]));
Run Code Online (Sandbox Code Playgroud)

您可以将电位计的值输入到PC(通过USB).那么有没有办法在C或C++中读取这些值?

我知道如何通过C或C++在Windows中设置音量,我只需要知道是否有办法在(Visual)C或C++脚本中读出电位计的值.

小智 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
}
Run Code Online (Sandbox Code Playgroud)

电脑上的代码:

#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);
}
Run Code Online (Sandbox Code Playgroud)