Q-Keyboard-Arduino中文社区 - Powered by Discuz! Archiver

Zoologist 发表于 2017-10-19 23:06

Q-Keyboard

本帖最后由 Zoologist 于 2017-11-29 21:02 编辑

很多时候,我们需要更简单的方式定义按键(特别是对于笔记本之类的),因此我使用 Pro Micro 制作一个小型键盘,上面有三个全尺寸的按键,能够完成特定的功能。

功能如下:

1.一键发出自定义快捷键。 比如,我们使用 Win + Space 来切换输入法。具体的代码实现就是模拟按下2个按键。

2.一键锁屏。比如,我们离开座位,最好将屏幕锁定,使用Win+L 来锁定屏幕,方法和上面的相同

3.一键调出应用程序。这个的实现比较特殊,需要重新加入一个 HID 的描述符,为此我编写了一个函数库。每次按下按钮,会掉出来计算器

4.一键静音。这个实现原理和3类似。只是因为我键盘上只有3个按钮所以代码中没有加入。

电路图


板子上有3个按键,5个LED, 3个在按键下面,2个在板子上。多余的2个LED是原本计划用来实现提醒的功能的。比如说,电脑上在编译,然后当编译结束的时候,这个LED会进行闪烁提醒。

装配的部分过程


焊接好之后,还有一个激光切割的外壳,按下之后LED会亮起来逐渐熄灭(PWM 实现)


完整的代码:
#include <Keyboard.h>
#include <Remote.h>


#define MOD_GUI_LEFT       0x83            // Win 按键


//从左到右,Key
byte key={2,4,7};


//从左到右,按键上的LED,Led
byte led={3,5,6,9,8};
byte brightness;


void setup() {
Serial.begin(9600);
Keyboard.begin();
Remote.begin();
Serial.println("Q Starting....");
for (byte i=0;i<sizeof(key);i++)
    {
      pinMode(key,INPUT_PULLUP);
    }
for (byte i=0;i<sizeof(led);i++)
    {
      pinMode(led,OUTPUT);
      digitalWrite(led,HIGH);
      delay(300);
      digitalWrite(led,LOW);
    }   
}


void loop() {
for (byte i=0;i<3;i++)
{
    if (LOW==digitalRead(key))
    {
      delay(50);
      if (LOW==digitalRead(key))
      {
      Serial.print(i);
      Serial.println("key pressed");
      brightness=255;
      if (0==i) {
          Keyboard.press(MOD_GUI_LEFT); //按下 Win Key
          Keyboard.press('l');          //按下 L
          delay(200);
          Keyboard.releaseAll();      //抬起全部按键
      }
      if (1==i) {
          Keyboard.press(MOD_GUI_LEFT); //按下 Win Key
          Keyboard.press(' ');         //按下 Space
          delay(200);
          Keyboard.releaseAll();      //抬起全部按键      
      }


      if (2==i) {
          Remote.calc();      
      }         
      }
    }
    }
delay(30);
for (byte i=0;i<3;i++) {
      if (brightness!=0) {
          brightness--;
          analogWrite(led,brightness);
      }
    }   
}




实现功能3 4 的库:


Zoologist 发表于 2017-10-23 16:08

本帖最后由 Zoologist 于 2017-10-23 16:10 编辑

这是工作视频

https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=w0564bt712f&auto=0

syl312 发表于 2017-10-26 21:48

1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
页: [1]
查看完整版本: Q-Keyboard