使用Arduino信号作为PC的输入

Use Arduino signals as input for PC?

本文关键字:PC 输入 Arduino 信号 使用      更新时间:2023-10-16

我最近得到了我的手Arduino (Uno),我想知道的东西。

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

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

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

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

你可以得到电位器的值到pc(通过USB)。有没有办法在C或c++中读取这些值?

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

当然。使用完全相同的方法:串行通信。由于我不是一个很好的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);
}

有一些事情需要考虑。

  • 您希望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。文档和示例: