5

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

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

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

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

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

您可以将电位器的值发送到电脑(通过 USB)。那么有什么方法可以在 C 或 C++ 中读取这些值?

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

4

2 回答 2

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);
}
于 2013-04-04T09:07:28.103 回答
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上的文档和示例。

于 2013-04-04T12:14:50.787 回答