Реализация задержки в 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()
для считывания аналогового значения и щелчка, а также прерывание для перемещения курсора мыши, но ваш подход может быть другим.