查看: 24169|回复: 16

Arduino keyboard库简单介绍

[复制链接]
  • TA的每日心情
    奋斗
    2016-6-17 09:34
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2016-6-9 19:55 | 显示全部楼层 |阅读模式
    本帖最后由 回到b不再度v 于 2016-6-9 20:14 编辑

    见文知义keyboard库,功能就是将arduino 模拟成一个usb键盘。
    Api如下
    • Keyboard.begin()
    • Keyboard.end()
    • Keyboard.press()
    • Keyboard.print()
    • Keyboard.println()
    • Keyboard.release()
    • Keyboard.releaseAll()
    • Keyboard.write()

    Keyboard. press (键值);
    输入:键值
        如Keyboard. press(‘A’);
        如Keyboard. press(KEY_LEFT_GUI);//左win
    实际输出:
        模拟usb键盘上键值所对应按键被按下

    输入键值与按键的对应关系见键值表

    Keyboard.release(键值)
    输入:键值
        如Keyboard.release(‘A’);
        如Keyboard.release(KEY_LEFT_GUI);//左win
    实际输出:
      模拟
    usb键盘上键值所对应按键被松开

    输入键值与按键的对应关系见键值表

    PS:Keyboard. press()和Keyboard.release()请成对使用,防止出现按键被按下没有松开的情况

    Keyboard.print(character);//模拟键盘敲出一个字符
    Keyboard.print(characters);//模拟键盘敲出一串字符的过程
    输入:字符或字符串
        Keyboard.print(“A”);
            Keyboard.print(“ABCDE”);
    实际输出
          模拟在usb键盘上敲出单个字符或字符串的过程

    Keyboard.println(character)// 模拟键盘敲出一个字符并添加换行的过程
    Keyboard.println(characters)// 模拟键盘敲出一串字符并添加换行的过程
    输入:字符或字符串
          Keyboard.print(“A”);
              Keyboard.print(“ABCDE”);
    实际输出
           模拟在usb键盘上敲出单个字符或字符串并添加换行的过程

    Keyboard.releaseAll()
    输入:无

    实际输出:释放所有按键;


    示例程序:
             前置技能:keypad MultiKey示例程序




    1. #include <Keyboard.h>
    2. #include <Keypad.h>

    3. const byte ROWS = 4; //four rows
    4. const byte COLS = 3; //three columns
    5. char keys[ROWS][COLS] = {
    6. {'1','2','3'},
    7. {'4','5','6'},
    8. {'7','8','9'},
    9. {KEY_LEFT_GUI,'0',KEY_F1}
    10. };
    11. byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the kpd
    12. byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the kpd

    13. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

    14. void setup()
    15. {
    16.     Keyboard.begin();
    17. }


    18. void loop()
    19. {
    20.    
    21.     if (kpd.getKeys())
    22.     {
    23.         for (int i=0; i<LIST_MAX; i++)   // Scan the whole key list.
    24.         {
    25.             if ( kpd.key[i].stateChanged )   // Only find keys that have changed state.
    26.             {
    27.                 switch (kpd.key[i].kstate)
    28.                 {  // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
    29.                     case PRESSED:
    30.                     Keyboard. press(kpd.key[i].kchar);//if the key pressed,send the keychar to keyboard
    31.                 break;
    32.                     case HOLD:
    33.                   
    34.                 break;
    35.                     case RELEASED:
    36.                     Keyboard.release(kpd.key[i].kchar);//if the key release,send the keychar to keyboard
    37.                 break;
    38.                     case IDLE:
    39.                   
    40.                 }
    41.             }
    42.         }
    43.     }
    44. }  // End loop
    复制代码



    键值表:
          【from keyboard.h/keyboard.cpp】


    一,宏定义部分
       【输入宏定义】
    #define     KEY_LEFT_CTRL             0x80
    #define     KEY_LEFT_SHIFT            0x81
    #define     KEY_LEFT_ALT               0x82
    #define     KEY_LEFT_GUI               0x83
    #define     KEY_RIGHT_CTRL           0x84
    #define     KEY_RIGHT_SHIFT          0x85
    #define     KEY_RIGHT_ALT             0x86
    #define     KEY_RIGHT_GUI             0x87
    #define     KEY_UP_ARROW            0xDA
    #define     KEY_DOWN_ARROW     0xD9
    #define     KEY_LEFT_ARROW         0xD8
    #define     KEY_RIGHT_ARROW      0xD7
    #define     KEY_BACKSPACE           0xB2
    #define     KEY_TAB                        0xB3
    #define     KEY_RETURN                 0xB0
    #define     KEY_ESC                        0xB1
    #define     KEY_INSERT                   0xD1
    #define     KEY_DELETE                   0xD4
    #define     KEY_PAGE_UP                0xD3
    #define     KEY_PAGE_DOWN         0xD6
    #define      KEY_HOME                    0xD2
    #define      KEY_END                       0xD5
    #define      KEY_CAPS_LOCK           0xC1
    #define      KEY_F1                          0xC2
    #define     KEY_F2                          0xC3
    #define     KEY_F3                          0xC4
    #define     KEY_F4                          0xC5
    #define     KEY_F5                          0xC6
    #define     KEY_F6                          0xC7
    #define     KEY_F7                          0xC8
    #define     KEY_F8                          0xC9
    #define     KEY_F9                          0xCA
    #define     KEY_F10                        0xCB
    #define     KEY_F11                         0xCC
    #define     KEY_F12                        0xCD

    二,ascii 码部分
       【输入注释里的字符的ascii码】
    0x2a,                  // BS    Backspace
    0x2b,                  // TAB    Tab
    0x28,                  // LF    Enter
    0x2c,                  //  ' '
    0x1e|SHIFT,       // !
    0x34|SHIFT,       // "
    0x20|SHIFT,       // #
    0x21|SHIFT,       // $
    0x22|SHIFT,       // %
    0x24|SHIFT,       // &
    0x34,                 // '
    0x26|SHIFT,       // (
    0x27|SHIFT,       // )
    0x25|SHIFT,       // *
    0x2e|SHIFT,       // +
    0x36,                 // ,
    0x2d,                // -
    0x37,                // .
    0x38,                // /
    0x27,                // 0
    0x1e,                // 1
    0x1f,                 // 2
    0x20,                // 3
    0x21,                // 4
    0x22,                // 5
    0x23,                // 6
    0x24,                // 7
    0x25,                // 8
    0x26,                // 9
    0x33|SHIFT,      // :
    0x33,                // ;
    0x36|SHIFT,      // <
    0x2e,                // =
    0x37|SHIFT,      // >
    0x38|SHIFT,      // ?
    0x1f|SHIFT,       // @
    0x04|SHIFT,      // A
    0x05|SHIFT,      // B
    0x06|SHIFT,      // C
    0x07|SHIFT,      // D
    0x08|SHIFT,      // E
    0x09|SHIFT,      // F
    0x0a|SHIFT,      // G
    0x0b|SHIFT,      // H
    0x0c|SHIFT,      // I
    0x0d|SHIFT,      // J
    0x0e|SHIFT,      // K
    0x0f|SHIFT,       // L
    0x10|SHIFT,      // M
    0x11|SHIFT,      // N
    0x12|SHIFT,      // O
    0x13|SHIFT,      // P
    0x14|SHIFT,      // Q
    0x15|SHIFT,      // R
    0x16|SHIFT,      // S
    0x17|SHIFT,      // T
    0x18|SHIFT,      // U
    0x19|SHIFT,      // V
    0x1a|SHIFT,      // W
    0x1b|SHIFT,      // X
    0x1c|SHIFT,      // Y
    0x1d|SHIFT,      // Z
    0x2f,                 // [
    0x31,                // bslash
    0x30,                // ]
    0x23|SHIFT,      // ^
    0x2d|SHIFT,      // _
    0x35,                // `
    0x04,                // a
    0x05,                // b
    0x06,                // c
    0x07,                // d
    0x08,                // e
    0x09,                // f
    0x0a,                // g
    0x0b,                // h
    0x0c,                 // i
    0x0d,                // j
    0x0e,                // k
    0x0f,                 // l
    0x10,                // m
    0x11,                // n
    0x12,                // o
    0x13,                // p
    0x14,                // q
    0x15,                // r
    0x16,                // s
    0x17,                // t
    0x18,                // u
    0x19,                // v
    0x1a,                // w
    0x1b,                // x
    0x1c,                // y
    0x1d,               // z
    0x2f|SHIFT,      // {
    0x31|SHIFT,     // |
    0x30|SHIFT,     // }
    0x35|SHIFT,     // ~







  • TA的每日心情
    郁闷
    2017-11-26 22:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-12-27 09:07 | 显示全部楼层
    找到了,更新到1.8的版本后出现了。但是调用keyboard库的时候,会报错说“Arduino:1.8.0 (Mac OS X), 开发板:"Arduino/Genuino Uno"
    没有找到'键盘'。项目里是否包含'#include <Keyboard.h>'?
  • TA的每日心情
    奋斗
    2019-9-6 09:03
  • 签到天数: 579 天

    [LV.9]以坛为家II

    发表于 2016-6-13 23:25 | 显示全部楼层
    感谢分享, 学习了 ~
    Leonardo (atmega32u4) 的USB库 (Mouse.h 及Keyboard.h)
  • TA的每日心情
    郁闷
    2017-11-26 22:55
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-12-27 08:50 | 显示全部楼层
    请问现在从哪里能够获得这个库文件呢?
  • TA的每日心情

    2017-1-20 00:30
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2017-1-20 22:24 | 显示全部楼层
    你好请问这怎么看输出的是哪个键呀?
  • TA的每日心情
    开心
    2016-2-4 04:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-1-20 23:42 | 显示全部楼层
    robinwei 发表于 2016-12-27 09:07
    找到了,更新到1.8的版本后出现了。但是调用keyboard库的时候,会报错说“Arduino:1.8.0 (Mac OS X), 开发 ...

    因为需要使用 leonardo 这种支持mouse 和 keyboard 库的板子
  • TA的每日心情
    开心
    2018-10-2 20:08
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2017-3-11 21:58 来自手机 | 显示全部楼层
    一直奇怪为什么按键不会松开 原来是我忘记放Keyboard.relase()
  • TA的每日心情
    郁闷
    2017-4-6 18:14
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2017-3-30 16:58 | 显示全部楼层
    验证你的程序怎么会出现这种情况的?能解释一下吗?
    I(9XBL5R_NTJCM{B3K5X(}K.png

    该用户从未签到

    发表于 2017-10-28 15:12 | 显示全部楼层
    你好,我想用一个arduino micro做一个小键盘,然后这个数字锁的代码是啥?就是numlock,在h文件中找不到。。
  • TA的每日心情

    2017-11-29 21:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-12-27 16:34 | 显示全部楼层
    如何解除4*4限制
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    哪位老哥有个U8g2lib.h这个库可以发一下吗
    哪位老哥有个U8g2lib.h这
    光线跟踪钛合金猫眼
    光线跟踪钛合金猫眼
    +视频 https://www.bilibili.com/video/av67732712/ +原理 ---光线跟踪 建立极
    "高精度"米家电子温湿度计Pro拆解
    "高精度"米家电子温湿度计
    为了了解哪种温湿度传感器更好,我搞了一个米家电子温湿度计Pro(阿蒙同志赠送) 价格
    Blinker 模拟传感器+数字传感器例程(DHT11 温湿度+气体传感)
    Blinker 模拟传感器+数字
    才接触1星期,发现Blinker自带了很多例程,已经成功试验了DHT的例程序,并完善了体
    关于ADXL335加速度计相关问题
    关于ADXL335加速度计相关
    首先用测试程序,通过监视器看到获取到的模拟量 后面,把模拟量经过ADC以及公式换算
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表