USB鍵盤模拟實驗
實驗現象
模拟鍵盤上的和←和→按鍵,控制“是男人就下一百層”的遊戲
理論學習
利用Leonardo棒子的USB控制器,模仿一個USB鍵盤
原理圖

代碼編寫
在arduino中管理庫中下載下傳Keyboard庫,并用#include包含Keyboard.h頭檔案
#include<Keyboard.h>
#define KEY1 2 //向左按鍵
#define KEY2 3 //向右按鍵
int Flag_up = 1;
void setup()
{
pinMode(KEY1, INPUT_PULLUP);
pinMode(KEY2, INPUT_PULLUP);
Keyboard.begin();
}
void loop()
{
if ( ScanKey(1) == 1) //向左按鍵按下
{
Keyboard.press(KEY_LEFT_ARROW); //向電腦發送向左按鍵按下的指令
delay(50);
Keyboard.releaseAll(); //向電腦發送按鍵釋放的指令
}
else if (ScanKey(1) == 2) //向右按鍵按下
{
Keyboard.press(KEY_RIGHT_ARROW); //向電腦發送向右按鍵按下的指令
delay(50);
Keyboard.releaseAll(); //向電腦發送按鍵釋放的指令
}
}
unsigned char ScanKey(int mode) //按鍵掃描程式,傳回鍵值
{
if (mode) //mode = 1時候,該代碼支援長按。mode = 0時候,不支援長按
{
Flag_up = 1;
}
if (Flag_up && (digitalRead(KEY1) == LOW || digitalRead(KEY2) == LOW) ) //當Flag_up = 1并且按鍵按下時
{
Flag_up = 0; //清空Flag_up
delay(10); //延時去抖動
if (digitalRead(KEY1) == LOW) //按鍵按下
{
return 1; //傳回鍵值1
}
if (digitalRead(KEY2) == LOW) //按鍵按下
{
return 2; //傳回鍵值1
}
}
if (digitalRead(KEY1) == HIGH && digitalRead(KEY2) == HIGH) //按鍵松開時候
{
Flag_up = 1; //置位Flag_up
}
return 0; //傳回鍵值0
}