Arduino模拟USB鼠标-Arduino中文社区 - Powered by Discuz! Archiver

奈何col 发表于 2018-9-3 23:33

Arduino模拟USB鼠标

### 模拟鼠标控制

下面将使用摇杆模块和Arduino Leonardo模拟USB鼠标。



**遥杆模块**
摇杆模块由X/Y轴两个10K电位器和一个轻触按键组成。当摇杆在不同位置时,X/Y轴对应的电位器读出的阻值也不同。
      

通常摇杆底部有一个可以按下的轻触按键,本示例将使用这个自带的按键来开启模拟USB鼠标功能。

摇杆内部有两个带弹簧的可调电位器,当摇动时,会带动其中两个电位器游标触点,从而改变阻值。可以通过analogRead()读取两个电位器的模拟值,计算出电位器游标位置,从而判断当前摇杆在X/Y坐标系中的位置。

**摇杆模块引脚情况如下表:**

| 序号 | 标号 | 说明                                                 |
| ---- | ---- | ---------------------------------------------------- |
| 1    | B    | 轻触按键的一端,另一端接到GND(也可能有厂家接到VCC) |
| 2    | Y    | Y轴电位器游标触电对应的引脚                        |
| 3    | X    | X轴电位器游标触电对应的引脚                        |
| 4    | +    | VCC                                                |
| 5    | -    | GND                                                |








**示例程序代码如下:**

```
// 摇杆硬件定义
int enableButton = 7; // 摇杆按键,用作鼠标功能使能按键
int upButton = 6;   // 上方按键,模拟滚轮向上
int downButton = 3;   // 下方按键,模拟滚轮向下
int leftButton = 5;   // 左按键,模拟鼠标左键
int rightButton = 4;// 右按键,模拟鼠标右键
int xAxis = A1;       // 遥感X轴
int yAxis = A0;       // 遥感Y轴

int mouseSensitivity = 12; // 鼠标灵敏度
int wheelSensitivity = 1;// 滚轮灵敏度

boolean enable = false;               // 模拟鼠标功能是否可用
boolean lastEnableButtonState = HIGH; // 上一次使能按键读值

void setup() {
// 初始化各个按键
pinMode(enableButton, INPUT);
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
// 开始控制鼠标
Mouse.begin();
}

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

if (enable) {
    // 读取鼠标偏移值
    int x = readAxis(xAxis);
    int y = readAxis(yAxis);
    // 读取鼠标滚轮值
    int wheel = 0;
    if (digitalRead(upButton) == LOW) {
      wheel = wheelSensitivity;
    }
    else if (digitalRead(downButton) == LOW) {
      wheel = -wheelSensitivity;
    }
    // 移动鼠标位置或滚轮
    Mouse.move(x, y, wheel);
    // 点击鼠标左右键
    isClickButton(leftButton, MOUSE_LEFT);
    isClickButton(rightButton, MOUSE_RIGHT);
    // 延时一段时间,可以通过该值调整鼠标移动速度
    delay(10);
}
}
// 读取摇杆数据
// 即摇杆电位器的偏移量
int readAxis(int thisAxis) {
int reading = analogRead(thisAxis);
// 将读出的模拟值,缩小到一定范围
reading = map(reading, 0, 1023, 0, mouseSensitivity);
// 计算出一个鼠标偏移量
int distance = reading - (mouseSensitivity / 2);
int threshold = mouseSensitivity / 4;
// 如果电位器偏移量较小则不移动鼠标
if (abs(distance) < threshold) {
    distance = 0;
}
// 返回鼠标偏移量
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模拟鼠标模式,现在你可以试着用摇杆和按键来完成计算机鼠标操作了。

想学坏的小孩 发表于 2018-10-22 21:26

micro 的鼠标能精准移动么? 我写的代码里 不能进行精准移动 move 1,0,0 for 100次 实际上只移动了52个像素

Jingqiu 发表于 2018-11-1 21:21

Mose 这个类在程序里没有定义呀,是应该还有个头文件吗?

Jingqiu 发表于 2018-11-1 21:22

Mouse的类

hanyue 发表于 2018-12-19 10:49

怎么买啊?没有购买按钮

qwer1213095357 发表于 2019-5-9 10:39

123的发射点发大水阿斯蒂芬阿斯顿

xiaoai1111 发表于 2019-8-10 21:35

第一次接触这东西,来学习学习,

li23829390 发表于 2019-8-21 11:38

看看能不能用,现在正在做这个玩

marciva 发表于 2019-10-9 00:08

li23829390 发表于 2019-8-21 11:38
看看能不能用,现在正在做这个玩

现在还在弄吗我有问题需要请教您一下方便加个微信吗   我微信wuzi7778889

marciva 发表于 2019-10-9 00:09

li23829390 发表于 2019-8-21 11:38
看看能不能用,现在正在做这个玩

我有个问题需要请教您一下方便加个微信吗   我微信wuzi7778889
页: [1] 2
查看完整版本: Arduino模拟USB鼠标