我最近得到了一个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 ++脚本中读出电位计的值。
答案 0 :(得分: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);
}
答案 1 :(得分: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上的文档和示例。