使用快捷键调节电脑音量非常方便,许多多媒体键盘都内置有该功能。但是如果您的键盘没有,您可以使用Arduino、一个旋钮和一些代码来构建该工具。本指南将介绍如何添加外部的库,并使用Arduino来控制您的PC。
volume1.jpg
如何使用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 volume2.jpg
一个电位器这是一个简单的三引脚输入元件,带有一个附加的旋钮或控制盘。通过调节功率吞吐量,该输入可以调整Arduino内部的一个值,我们可以将其用作音量控制。
volume3.jpg
Arduino IDE如果您尚未设置Arduino IDE, 您可以点击此处(https://www.deviceplus.com/arduino/create-your-first-sketch-and-learn-more-about-the-programming-language/)查看之前的指南
volume4.png
您还需要一根微型USB线(如果您身边没有的话),以及一台可以工作的计算机。
本指南是为Windows用户设计的,虽然也适用于使用其他操作系统的用户,但是在细节上可能会有所不同。

代码
首先,以下是我们将使用的草图中的完整代码:
  1. #include
  2. int potpin = 0; // Assign analog pin to potentiometer
  3. int val = 0; // Variable to read value from potentiometer, starts at 0
  4. int oldVolume = 0; // Used to compare volume levels
  5. int currentVolume = 0; // Used to compare volume levels
  6. void setup() {
  7. Serial.begin(9600); // This will allow you to read the current value of the dial
  8. }
  9. void loop() {
  10. val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
  11. val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
  12. Serial.print(val); // Print dial/volume position
  13. Serial.println(); //
  14. if (val != oldVolume) {
  15. if(val > oldVolume){
  16. //delay(100);
  17. Consumer.write(MEDIA_VOLUME_UP);
  18. currentVolume = currentVolume + 2;
  19. oldVolume = val;
  20. }
  21. else{
  22. //delay(100);
  23. Consumer.write(MEDIA_VOLUME_DOWN);
  24. currentVolume = currentVolume – 2;
  25. oldVolume = val;
  26. }
  27. }
  28. }
如果您想直接跳到接线部分,可以将此代码复制到IDE中并上传。现在,我们来解释一下这个草图中的一些重要部分。
  1. #include
该命令将会把您之前添加到草图中的媒体控制库进行引用。这使我们可以使用稍后将讨论的那些命令。虽然通过菜单将Hoodloader库添加到您的IDE也可以使其在草图中可用,但是该行代码对于需要使用其中所包含命令的任何草图都是必需的。
  1. int potpin = 0; // Assign analog pin to potentiometer
  2. int val = 0; // Variable to read value from potentiometer, starts at 0
  3. int oldVolume = 0; // Used to compare volume levels
  4. int currentVolume = 0; // Used to compare volume levels
这里的第一行从电位器(按钮/控制盘)启动信号。然后将控制盘的位置分配给val变量。这用于提高或降低音量。
由于无法直接分配音量级别,草图会指示PC以2为增量来提升或降低音量级别(Windows音量级别范围为0到100),直到调整到所需的音量级别。之后的两个变量oldVolume和currentVolume在每次循环迭代中都会进行比较,直到它们与控制盘输出的级别匹配。
  1. val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
  2. val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
这两行代码用于读取控制盘的位置,然后将该值映射到0到50的范围中。通常,电位器可以读取0到1023范围内的值,但这比我们所需要的变化范围大得多,所以我们需要将范围压缩到0到50。
由于Windows的音量调整范围是0到100,并且每执行一次音量增大或减小命令,音量级别的增量为2,所以这可以使控制盘的最小和最大值对应于Windows中的最小和最大音量级别。
  1. if (val != oldVolume) {
  2. if(val > oldVolume){
  3. Consumer.write(MEDIA_VOLUME_UP);
  4. currentVolume = currentVolume + 2;
  5. oldVolume = val;
  6. }
  7. else{
  8. Consumer.write(MEDIA_VOLUME_DOWN);
  9. currentVolume = currentVolume – 2;
  10. oldVolume = val;
  11. }
  12. }
在这个基本循环中,会将来自控制盘的值和之前的音量级别进行比较。只要没有发生任何变化,该循环中的代码就不会被执行。一旦控制盘发生了移动,循环代码将开始执行。如果控制盘向上移动,那么循环将会执行MEDIA_VOLUME_UP命令,直到系统音量与控制盘位置相匹配。如果控制盘向下移动,循环将改为执行MEDIA_VOLUME_DOWN命令。
该命令是使用HID项目API的Consumer.write()函数(https://github.com/NicoHood/HID/wiki/Consumer-API)来发送的。该命令还可用于诸如媒体暂停、媒体播放或静音等工作。您可以尝试添加更多的输入元件,如按钮,并调整草图对其进行使用。
volume5.jpg
接线
现在您已经了解代码是如何工作的了,接下来可以将草图上传到您的Arduino Leonard。上传后,您可以开始连接电位器。这个项目的接线很简单:
● 将电位器的第一个引脚连接到GND。
● 将中间引脚连接到模拟引脚A0。
● 将电位器的最后一个引脚连接到5V引脚。
● 将Leonardo上的微型USB端口连接到计算机
虽然在许多Arduino项目中,只要有电源,就可以在不使用计算机的情况下运行,但是在本项目中,很显然是需要连接计算机的。
在使用此版本的草图时,最好在首次启动Arduino时将计算机音量和控制盘都设置为零。但是,为了使其更加灵活,您也可以尝试添加Consumer 库(https://github.com/NicoHood/HID/wiki/Consumer-API)中的其他命令来自动调低系统音量,以便您在首次连接使用时将其与您的控制盘同步。



来源:techclass.rohm