相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有140858人學(xué)過(guò)

Arduino模擬USB鼠標(biāo)
發(fā)布時(shí)間:2022-03-11 09:34 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 3647

模擬鼠標(biāo)控制

下面將使用搖桿模塊和Arduino Leonardo模擬USB鼠標(biāo)。

遙桿模塊
搖桿模塊  由X/Y軸兩個(gè)10K電位器和一個(gè)輕觸按鍵組成。當(dāng)搖桿在不同位置時(shí),X/Y軸對(duì)應(yīng)的電位器讀出的阻值也不同。

      

通常搖桿底部有一個(gè)可以按下的輕觸按鍵,本示例將使用這個(gè)自帶的按鍵來(lái)開(kāi)啟模擬USB鼠標(biāo)功能。

搖桿內(nèi)部有兩個(gè)帶彈簧的可調(diào)電位器,當(dāng)搖動(dòng)時(shí),會(huì)帶動(dòng)其中兩個(gè)電位器游標(biāo)觸點(diǎn),從而改變阻值。可以通過(guò)analogRead()讀取兩個(gè)電位器的模擬值,計(jì)算出電位器游標(biāo)位置,從而判斷當(dāng)前搖桿在X/Y坐標(biāo)系中的位置。

搖桿模塊引腳情況如下表:

序號(hào) 標(biāo)號(hào) 說(shuō)明
1 B 輕觸按鍵的一端,另一端接到GND(也可能有廠家接到VCC)
2 Y Y軸電位器游標(biāo)觸電對(duì)應(yīng)的引腳
3 X X軸電位器游標(biāo)觸電對(duì)應(yīng)的引腳
4 + VCC
5 - GND

示例程序代碼如下:

// 搖桿硬件定義
int enableButton = 7; // 搖桿按鍵,用作鼠標(biāo)功能使能按鍵
int upButton = 6;     // 上方按鍵,模擬滾輪向上
int downButton = 3;   // 下方按鍵,模擬滾輪向下
int leftButton = 5;   // 左按鍵,模擬鼠標(biāo)左鍵
int rightButton = 4;  // 右按鍵,模擬鼠標(biāo)右鍵
int xAxis = A1;       // 遙感X軸
int yAxis = A0;       // 遙感Y軸

int mouseSensitivity = 12; // 鼠標(biāo)靈敏度
int wheelSensitivity = 1;  // 滾輪靈敏度

boolean enable = false;               // 模擬鼠標(biāo)功能是否可用
boolean lastEnableButtonState = HIGH; // 上一次使能按鍵讀值

void setup() {
  // 初始化各個(gè)按鍵
  pinMode(enableButton, INPUT);
  pinMode(upButton, INPUT);
  pinMode(downButton, INPUT);
  pinMode(leftButton, INPUT);
  pinMode(rightButton, INPUT);
  // 開(kāi)始控制鼠標(biāo)
  Mouse.begin();
}

void loop() {
  // 使能按鍵按一次使能,再按一次不使能
  boolean EnableButtonState = digitalRead(enableButton);
  if ((EnableButtonState == LOW) && (EnableButtonState != lastEnableButtonState)) {
    enable = !enable;
  }
  lastEnableButtonState = EnableButtonState;

  if (enable) {
    // 讀取鼠標(biāo)偏移值
    int x = readAxis(xAxis);
    int y = readAxis(yAxis);
    // 讀取鼠標(biāo)滾輪值
    int wheel = 0;
    if (digitalRead(upButton) == LOW) {
      wheel = wheelSensitivity;
    }
    else if (digitalRead(downButton) == LOW) {
      wheel = -wheelSensitivity;
    }
    // 移動(dòng)鼠標(biāo)位置或滾輪
    Mouse.move(x, y, wheel);
    // 點(diǎn)擊鼠標(biāo)左右鍵
    isClickButton(leftButton, MOUSE_LEFT);
    isClickButton(rightButton, MOUSE_RIGHT);
    // 延時(shí)一段時(shí)間,可以通過(guò)該值調(diào)整鼠標(biāo)移動(dòng)速度
    delay(10);
  }
}
// 讀取搖桿數(shù)據(jù)
// 即搖桿電位器的偏移量
int readAxis(int thisAxis) {
  int reading = analogRead(thisAxis);
  // 將讀出的模擬值,縮小到一定范圍
  reading = map(reading, 0, 1023, 0, mouseSensitivity);
  // 計(jì)算出一個(gè)鼠標(biāo)偏移量
  int distance = reading - (mouseSensitivity / 2);
  int threshold = mouseSensitivity / 4;
  // 如果電位器偏移量較小則不移動(dòng)鼠標(biāo)
  if (abs(distance) < threshold) {
    distance = 0;
  }
  // 返回鼠標(biāo)偏移量
  return distance;
}
// 判斷按鍵是否被按下
void isClickButton(int Buttonpin, uint8_t Button) {
  if (digitalRead(Buttonpin) == LOW) {
    if (!Mouse.isPressed(Button)) {
      Mouse.press(Button);
    }
  }
  else if (Mouse.isPressed(Button)) {
    Mouse.release(Button);
  }
}

下載以上程序后,Leonardo會(huì)自動(dòng)切換到USB模擬鼠標(biāo)模式,現(xiàn)在你可以試著用搖桿和按鍵來(lái)完成計(jì)算機(jī)鼠標(biāo)操作了。

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

75小節(jié)已有140858人學(xué)過(guò)

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