模擬鼠標(biāo)控制
下面將使用搖桿模塊和Arduino Leonardo模擬USB鼠標(biāo)。
遙桿模塊
搖桿模塊 由X/Y軸兩個10K電位器和一個輕觸按鍵組成。當(dāng)搖桿在不同位置時,X/Y軸對應(yīng)的電位器讀出的阻值也不同。
通常搖桿底部有一個可以按下的輕觸按鍵,本示例將使用這個自帶的按鍵來開啟模擬USB鼠標(biāo)功能。
搖桿內(nèi)部有兩個帶彈簧的可調(diào)電位器,當(dāng)搖動時,會帶動其中兩個電位器游標(biāo)觸點,從而改變阻值?梢酝ㄟ^analogRead()讀取兩個電位器的模擬值,計算出電位器游標(biāo)位置,從而判斷當(dāng)前搖桿在X/Y坐標(biāo)系中的位置。
搖桿模塊引腳情況如下表:
序號 | 標(biāo)號 | 說明 |
---|---|---|
1 | B | 輕觸按鍵的一端,另一端接到GND(也可能有廠家接到VCC) |
2 | Y | Y軸電位器游標(biāo)觸電對應(yīng)的引腳 |
3 | X | X軸電位器游標(biāo)觸電對應(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() {
// 初始化各個按鍵
pinMode(enableButton, INPUT);
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
// 開始控制鼠標(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;
}
// 移動鼠標(biāo)位置或滾輪
Mouse.move(x, y, wheel);
// 點擊鼠標(biāo)左右鍵
isClickButton(leftButton, MOUSE_LEFT);
isClickButton(rightButton, MOUSE_RIGHT);
// 延時一段時間,可以通過該值調(diào)整鼠標(biāo)移動速度
delay(10);
}
}
// 讀取搖桿數(shù)據(jù)
// 即搖桿電位器的偏移量
int readAxis(int thisAxis) {
int reading = analogRead(thisAxis);
// 將讀出的模擬值,縮小到一定范圍
reading = map(reading, 0, 1023, 0, mouseSensitivity);
// 計算出一個鼠標(biāo)偏移量
int distance = reading - (mouseSensitivity / 2);
int threshold = mouseSensitivity / 4;
// 如果電位器偏移量較小則不移動鼠標(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會自動切換到USB模擬鼠標(biāo)模式,現(xiàn)在你可以試著用搖桿和按鍵來完成計算機鼠標(biāo)操作了。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。