leonardo采用了34U4,相比于328p来说将usb整合进入了mcu中,单价也略高
共有这几个函数
Keyboard.print();
Keyboard.println();
Keyboard.release();
Keyboard.releaseAll();
Keyboard.begin();
Keyboard.end();
我们可以通过使用矩阵键盘函数和物理矩阵键盘输入字符并识别,然后使用函数Keyboard.print()来反映到PC上
例如:Keyboard.print(“s”);
Keyboard.print(steel);//这里的steel是一个已经被定义的值
除了abc012这类的单个字符还有些其他的按键:
按键名称 |
对应十六进制 |
对应的十进制 |
KEY_LEFT_CTRL |
0x80 |
128 |
KEY_LEFT_SHIFT |
0x81 |
129 |
KEY_LEFT_ALT |
0x82 |
130 |
KEY_LEFT_GUI |
0x83 |
131 |
KEY_RIGHT_CTRL |
0x84 |
132 |
KEY_RIGHT_SHIFT |
0x85 |
133 |
KEY_RIGHT_ALT |
0x86 |
134 |
KEY_RIGHT_GUI |
0x87 |
135 |
KEY_UP_ARROW |
0xDA |
218 |
KEY_DOWN_ARROW |
0xD9 |
217 |
KEY_LEFT_ARROW |
0xD8 |
216 |
KEY_RIGHT_ARROW |
0xD7 |
215 |
KEY_BACKSPACE |
0xB2 |
178 |
KEY_TAB |
0xB3 |
179 |
KEY_RETURN |
0xB0 |
176 |
KEY_ESC |
0xB1 |
177 |
KEY_INSERT |
0xD1 |
209 |
KEY_DELETE |
0xD4 |
212 |
KEY_PAGE_UP |
0xD3 |
211 |
KEY_PAGE_DOWN |
0xD6 |
214 |
KEY_HOME |
0xD2 |
210 |
KEY_END |
0xD5 |
213 |
KEY_CAPS_LOCK |
0xC1 |
193 |
KEY_F1 |
0xC2 |
194 |
KEY_F2 |
0xC3 |
195 |
KEY_F3 |
0xC4 |
196 |
KEY_F4 |
0xC5 |
197 |
KEY_F5 |
0xC6 |
198 |
KEY_F6 |
0xC7 |
199 |
KEY_F7 |
0xC8 |
200 |
KEY_F8 |
0xC9 |
201 |
KEY_F9 |
0xCA |
202 |
KEY_F10 |
0xCB |
203 |
KEY_F11 |
0xCC |
204 |
KEY_F12 |
0xCD |
205 |
更多的按键对应数值请查看ASCII码表: http://www.asciitable.com/
这些按键的用法
例子:
const char ctrlKey = KEY_LEFT_GUI;
void setup()
{
Keyboard.print(ctrlKey);
}
这样就如同按下了左ctrl按键
如果要组合键比如说ctrl+C则
Keyboard.press(ctrlKey);
Keyboard.press(‘C’);
delay(10);
Keyboard.releaseAll();//映射press函数的所有按键到PC
示例代码:
//基于arduino 莱昂纳多
//the die ver is 1.6.7
//this suite include a serial keyboard
#include "Keypad.h"
#include "Keyboard.h"
int counter = 1;
const byte ROWS = 6; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'H', '0', 'L', 'L'},
{'O', 'C', 'K', 'E'},
{'*', '0', 13, ' '}//13 is enter button
};
const char String1[] = {"sh"};//演示用
byte rowPins[ROWS] = {4, 5, 6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {10, 16, 14, 15}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);//矩阵实体键盘的初始化函数
void setup() {
Serial.begin(9600);
}
void loop() {
char customKey = customKeypad.getKey();
int k, i, j;
if (customKey) {
Serial.print(customKey);
Keyboard.print(customKey);
if (customKey == ' ')
{ for (k = 0; k < 15; k++)
{
for (j = 0; j < 5; j++)
{
Keyboard.println(String1);
delay(10);
for(i=0;i
Keyboard.println(".");
Keyboard.println(counter);
counter ++;
delay(10);
if (counter == 6)
counter = 1;
}
}
}
if(customKey =='*')
Keyboard.println(String2);
}
}
关于机械键盘部分:
这里使用一块切割下的PCB和和黑轴以及KBC的白色按键
利用杜邦线直接连接到Arduino 莱昂纳多pro micro 上
基本电路就是矩阵键盘的常用电路,因为十分常见就不附带贴图
有兴趣可以尝试一下n线达到nxn键盘的扫描电路,这样利用能达到最多18x18个按键