相關推薦
您可能對下面課程感興趣
Arduino視頻教程基礎篇

75小節(jié)已有138575人學過

Arduino模擬USB鍵盤
發(fā)布時間:2022-03-11 09:31 [ 我要自學網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 5326

模擬鍵盤輸入信息

本示例將演示使用Arduino Leonardo模擬USB鍵盤輸出信息。


[sf]

要直接模擬鍵盤輸入信息很簡單,只需使用Keyboard.print() 或者Keyboard.println() 即可。這里我們要做個文本發(fā)送器,每按一次按鍵,輸入一條信息。
實驗連接示意圖如圖9-1所示,在2號引腳上連接了一個10K上拉電阻,如果你使用的是按鍵模塊,那你可能需要將對應引腳口設置開啟內(nèi)部上拉電阻。


模擬鍵盤輸入實驗連接示意圖

示例程序如下,你可以在文件>示例>09.USB>Keyboard>KeyboardMessage找到該程序。

#include "Keyboard.h"

const int buttonPin = 4;          // 按鍵連接引腳
int previousButtonState = HIGH;   // 之前按鍵狀態(tài)
int counter = 0;                  // 按鍵計數(shù)器

void setup() {
  // 初始化按鍵引腳,如果沒有上拉電阻,需要使用INPUT_PULLUP
  pinMode(buttonPin, INPUT);
  // 初始化模擬鍵盤功能
  Keyboard.begin();
}

void loop() {
  // 讀按鍵狀態(tài)
  int buttonState = digitalRead(buttonPin);
  // 如果按鍵狀態(tài)改變,且當前按鍵狀態(tài)為高電平
  if ((buttonState != previousButtonState) && (buttonState == HIGH)) {
    // 按鍵計數(shù)器加1
    counter++;
    // 模擬鍵盤輸出信息
    Keyboard.print("You pressed the button ");
    Keyboard.print(counter);
    Keyboard.println(" times.");
  }
  // 保存當前按鍵狀態(tài),用于下一次比較
  previousButtonState = buttonState;
}

下載程序后,選擇一個可以輸入文本的輸入框,按下按鍵,你可以看到文本框中隨即出現(xiàn)了“You pressed the button 1 times.”文本,再次按下按鍵,程序中計數(shù)器會將數(shù)字加1,因此你會看到“You pressed the button 2 times.”文本。

9.2.1        Arduino Leonardo在模擬USB設備后,無法正常下載程序。

當用Arduino Leonardo模擬鼠標鍵盤時,鍵盤鼠標可能會出現(xiàn)失靈亂跳的情況,這往往是因為程序中對應控制按鍵操作的I/O口懸空所致。當I/O懸空時,檢測到的輸入電平為不定值,可能會誤觸發(fā)鼠標鍵盤操作。你可以通過pinMode(pin,INPUT_PULLUP) 語句開啟對應引腳上的內(nèi)部上拉電阻,或者外接上下拉電阻,讓懸空時引腳檢測到的電平穩(wěn)定。本示例中即是通過給按鍵外接上拉電阻,確保按鍵未按下時I/O能讀到高電平。

在模擬USB設備后,USB口處于USB通信狀態(tài),此時可能無法正確下載程序,解決方法如下:
按住Arduino Leonardo上的復位按鍵不放,點擊上傳,等待IDE編譯,待Arduino提示上傳中時,放開復位按鈕,等待完成下載。  

更推薦的方法是,給USB設備模擬程序都添加一個按鍵開關,當點擊這個按鍵開關后,Arduino才開始模擬USB設備。

[/sf]

模擬鍵盤組合按鍵

以下程序,可以將Arduino Leonardo模擬成鍵盤,通過觸發(fā)2號引腳上連接的按鍵或者傳感器,可以讓你的計算機自動注銷登錄狀態(tài)。


[sf]

實現(xiàn)原理即是使用當前系統(tǒng)對應的快捷鍵功能,先通過Keyboard.press() 將需要使用的按鍵都選中,然后使用Keyboard.releaseAll() 釋放按鍵,即可模擬鍵盤同時按下組合按鍵的效果。
在示例程序中,我們將通過以上方法模擬組合按鍵按下效果,以達到注銷登錄狀態(tài)的目的。

你可以在文件>示例>09.USB>Keyboard>Keyboard Logout找到該程序。

#define OSX 0
#define WINDOWS 1
#define UBUNTU 2

// 設置你的操作系統(tǒng)
int platform = WINDOWS;

void setup() {
  // 將2號引腳設置為輸入狀態(tài)
  // 并開啟內(nèi)部上拉電阻
  pinMode(2, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
  while (digitalRead(2) == HIGH) {
    // 等待2號引腳變成低電平
    delay(500);
  }
  delay(1000);
  switch (platform) {
  case OSX:
    Keyboard.press(KEY_LEFT_GUI);
    // Shift+Q組合按鍵
    Keyboard.press(KEY_LEFT_SHIFT); 
    Keyboard.press('Q');
    delay(100);
    Keyboard.releaseAll();
    // 回車確認:
    Keyboard.write(KEY_RETURN);  
    break;
  case WINDOWS:
    // CTRL+ALT+DEL組合按鍵
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_DELETE);
    delay(100);
    Keyboard.releaseAll();
    // ALT+L組合按鍵:
    delay(2000);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press('l');
    Keyboard.releaseAll();
    break;
  case UBUNTU:
    // CTRL+ALT+DEL組合按鍵
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_DELETE);
    delay(1000);
    Keyboard.releaseAll();
    // 回車鍵確認登出
    Keyboard.write(KEY_RETURN);
    break;
  }
  // 進入死循環(huán),相當于結(jié)束程序
  while(true);
}

每種系統(tǒng)的對應的快捷鍵均不一樣,因此,下載該程序前,你需要先將程序設置為你對應的系統(tǒng),這里使用了宏定義來實現(xiàn)直接將系統(tǒng)名稱賦值給一個變量的效果。

#define OSX 0
#define WINDOWS 1
#define UBUNTU 2
// 設置你的操作系統(tǒng)
int platform = WINDOWS;

下載并運行程序,通過觸發(fā)2號引腳上的按鍵或者傳感器,當2號引腳讀到低電平時,即會觸發(fā)計算機執(zhí)行注銷當前用戶的操作。

Arduino視頻教程基礎篇
我要自學網(wǎng)商城 ¥40 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔因您的行為而導致的法律責任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關推薦
您可能對下面課程感興趣
Arduino視頻教程基礎篇

75小節(jié)已有138575人學過

分類選擇:
電腦辦公 平面設計 室內(nèi)設計 室外設計 機械設計 工業(yè)自動化 影視動畫 程序開發(fā) 網(wǎng)頁設計 會計課程 興趣成長 AIGC