不断延迟移动鼠标光标,并在模拟值超过300时单击。Arduino Pro Micro

时间:2019-03-05 18:52:19

标签: arduino mouse

我将Pro Micro用作USB主机,并以5秒钟的延迟将光标移动到屏幕上的预定义位置。我将AbsMouse库用于绝对鼠标光标位置。我想要的是,当模拟输入超过300时,我希望它执行XYZ功能。由于使用的延迟为5000,因此无法始终轮询模拟输入。

基本上,我希望光标连续循环移动到这些绝对位置。每当模拟值超过300时,它都应执行按下和释放功能。 我无法理解如何使用经过millis()或中断。请确切显示如何用代码完成。 非常感谢。

#include <AbsMouse.h>
int sensorValue = 0;
void setup()
{
    AbsMouse.init(1920, 1080);
}

void loop()
{

    sensorValue = analogRead(A0);
    AbsMouse.move(640, 127);
    delay(5000);
    AbsMouse.move(640, 400);
    delay(5000);
    AbsMouse.move(640, 625);
    delay(5000);
    AbsMouse.move(1280, 127);
    delay(5000);
    AbsMouse.move(1280, 400);
    delay(5000);
    AbsMouse.move(1280, 625);
    delay(5000);

    if (sensorValue >= 300)
    {
        AbsMouse.press(MOUSE_LEFT);
        AbsMouse.release(MOUSE_LEFT);
    }
}

1 个答案:

答案 0 :(得分:0)

等待5秒钟后测量经过的毫秒数,并在等待时读取模拟值,如下所示:

startTime = millis();
while(millis()-startTime < 5000) {
    sensorValue = analogRead(A0);
    if (sensorValue >= 300) {
        AbsMouse.press(MOUSE_LEFT);
        AbsMouse.release(MOUSE_LEFT);
    }
}

这有两个缺点,如果需要,您必须解决。第一个是,点击事件将在该值保持在300以上(即可以多次单击)时执行。第二个问题是,这并不是5秒的确切延迟,因为它可能会由于在while块内执行的代码而产生抖动。

正如您提到的,另一种选择是使用计时器中断来获得更精确的延迟。使用TimerOne之类的库,它是这样的(从库示例中得到启发,并修改为每5秒执行一次):

#include <TimerOne.h>

void setup(void) {
  Timer1.initialize(5000000);
  Timer1.attachInterrupt(fiveSeconds);
}

void fiveSeconds(void) {
    // do stuff
}

函数fiveSeconds应该每5秒执行一次,比millis()方法要精确得多。

现在,您应该向该函数添加代码,以实现您想要的操作。我建议使用loop()来读取模拟值并单击,并使用中断来移动鼠标光标,但是您的方法可能有所不同。