天天看點

USB鍵盤模拟實驗USB鍵盤模拟實驗

USB鍵盤模拟實驗

實驗現象

模拟鍵盤上的和←和→按鍵,控制“是男人就下一百層”的遊戲

理論學習

利用Leonardo棒子的USB控制器,模仿一個USB鍵盤

原理圖

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
}
           

繼續閱讀