如何使用Arduino控制您的计算机
为了用Arduino控制计算机,我们将使用一种名为Leonardo(https://store.arduino.cc/usa/leonardo)的变体Uno。与Uno不同的是,该板基于4ATmega32u4芯片组,这种芯片组本身支持USB通信,从而可以使开发板用作鼠标和键盘。方便的一点是,这也使该板可以发送媒体控制命令,类似于键盘上的音量、播放和暂停按钮的工作原理。
但是,为了使用这些媒体命令,您需要在Arduino IDE中启用一个额外的库。库中包含了可以执行各种特定任务的附加代码,而Arduino IDE自带有一些用于控制伺服系统、鼠标或键盘等常用功能的库。与此同时,IDE还包含一个可搜索的附加库目录,可以进一步扩展您的项目。
在这里我们将可以找到所需要的媒体控制库。在Arduino IDE中,进入Sketch > Include library > Manage librarie…然后搜索“hoodloader”,点击“Install(安装)”。现在,您就可以在IDE中使用HID项目库了。我们将在下文代码部分向您展示如何将其引用到您的草图中。
所需工具
有很多种方法可以构建该特定工具,从技术上讲,可以使用带有Hoodloader2 库(https://github.com/NicoHood/HoodLoader2)的 Arduino Uno来实现。但是,此方法的设置过程不在本指南的范围内,所以我们会重点关注被设计为默认用作USB鼠标或键盘的Arduino模型。在这一思路下,您将需要以下工具:
Arduino Leonardo |
|
一个电位器这是一个简单的三引脚输入元件,带有一个附加的旋钮或控制盘。通过调节功率吞吐量,该输入可以调整Arduino内部的一个值,我们可以将其用作音量控制。 |
|
Arduino IDE如果您尚未设置Arduino IDE, 您可以点击此处(https://www.deviceplus.com/arduino/create-your-first-sketch-and-learn-more-about-the-programming-language/)查看之前的指南 |
|
本指南是为Windows用户设计的,虽然也适用于使用其他操作系统的用户,但是在细节上可能会有所不同。
代码
首先,以下是我们将使用的草图中的完整代码:
- #include
- int potpin = 0; // Assign analog pin to potentiometer
- int val = 0; // Variable to read value from potentiometer, starts at 0
- int oldVolume = 0; // Used to compare volume levels
- int currentVolume = 0; // Used to compare volume levels
- void setup() {
- Serial.begin(9600); // This will allow you to read the current value of the dial
- }
- void loop() {
- val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
- val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
- Serial.print(val); // Print dial/volume position
- Serial.println(); //
- if (val != oldVolume) {
- if(val > oldVolume){
- //delay(100);
- Consumer.write(MEDIA_VOLUME_UP);
- currentVolume = currentVolume + 2;
- oldVolume = val;
- }
- else{
- //delay(100);
- Consumer.write(MEDIA_VOLUME_DOWN);
- currentVolume = currentVolume – 2;
- oldVolume = val;
- }
- }
- }
- #include
- int potpin = 0; // Assign analog pin to potentiometer
- int val = 0; // Variable to read value from potentiometer, starts at 0
- int oldVolume = 0; // Used to compare volume levels
- int currentVolume = 0; // Used to compare volume levels
由于无法直接分配音量级别,草图会指示PC以2为增量来提升或降低音量级别(Windows音量级别范围为0到100),直到调整到所需的音量级别。之后的两个变量oldVolume和currentVolume在每次循环迭代中都会进行比较,直到它们与控制盘输出的级别匹配。
- val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
- val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
由于Windows的音量调整范围是0到100,并且每执行一次音量增大或减小命令,音量级别的增量为2,所以这可以使控制盘的最小和最大值对应于Windows中的最小和最大音量级别。
- if (val != oldVolume) {
- if(val > oldVolume){
- Consumer.write(MEDIA_VOLUME_UP);
- currentVolume = currentVolume + 2;
- oldVolume = val;
- }
- else{
- Consumer.write(MEDIA_VOLUME_DOWN);
- currentVolume = currentVolume – 2;
- oldVolume = val;
- }
- }
该命令是使用HID项目API的Consumer.write()函数(https://github.com/NicoHood/HID/wiki/Consumer-API)来发送的。该命令还可用于诸如媒体暂停、媒体播放或静音等工作。您可以尝试添加更多的输入元件,如按钮,并调整草图对其进行使用。
接线
现在您已经了解代码是如何工作的了,接下来可以将草图上传到您的Arduino Leonard。上传后,您可以开始连接电位器。这个项目的接线很简单:
● 将电位器的第一个引脚连接到GND。
● 将中间引脚连接到模拟引脚A0。
● 将电位器的最后一个引脚连接到5V引脚。
● 将Leonardo上的微型USB端口连接到计算机
虽然在许多Arduino项目中,只要有电源,就可以在不使用计算机的情况下运行,但是在本项目中,很显然是需要连接计算机的。
在使用此版本的草图时,最好在首次启动Arduino时将计算机音量和控制盘都设置为零。但是,为了使其更加灵活,您也可以尝试添加Consumer 库(https://github.com/NicoHood/HID/wiki/Consumer-API)中的其他命令来自动调低系统音量,以便您在首次连接使用时将其与您的控制盘同步。
来源:techclass.rohm