Для решения вашей задачи, сначала нужно определить, в каком случае будет происходить сброс времени, когда действия не выполнялись больше 10 секунд.
Посмотрим на предложенные варианты:
Вариант 1 использует условие
if (horizontal != 512 and vertical != 512), что означает сброс времени только если оба значения не равны 512. Это может не сработать, если, например, одно значение остается статичным, а другое меняется.Вариант 2 использует
if (horizontal != 512 or vertical != 512), что сбрасывает время, как только одно из значений меняется. Это больше соответствует вашей цели, так как позволит сбрасывать таймер, если любое движение происходит.Вариант 3 определяет сброс времени только при равенстве значений
horizontalилиvertical512, что будет происходить не так часто, и подходит меньше.Вариант 4 также использует условие
if (horizontal != 512 or vertical == 512), что снизит вероятность сброса времени на случай изменения только одного из значений до 512.
Наиболее подходящий вариант — это Вариант 2, так как он обеспечивает наибольшую чувствительность к изменениям.
Вот как может выглядеть ваш код во избежание действий в течение 10 секунд:
time_passed = millis() - time_reset;
if (horizontal != 512 or vertical != 512) {
time_reset = millis();
}
if ((10000 < time_passed)) {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
delay(100);
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, LOW);
delay(100);
tone(BUZZ_PIN, 250, 100);
}
Таким образом, если в течение 10 секунд не будет обнаружено изменений, светодиод начнет мигать желтым, а зуммер будет активироваться.
