天天看點

24.USB鍵盤模拟實驗

實驗現象:

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

理論學習:

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

  關于USB鍵盤的資料,請檢視官方網站:

  http://arduino.cc/en/Reference/KeyboardWrite

  關于鍵盤上的按鍵名稱和鍵值,請檢視:

  http://arduino.cc/en/Reference/KeyboardModifiers

  關于 ASCII 碼表,請檢視:

  http://www.asciitable.com/ 

程式代碼:

#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
}
           
24.USB鍵盤模拟實驗
24.USB鍵盤模拟實驗

繼續閱讀