Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №1834768
А
Аноним
13 октября 2024 15:59 · публичный вопрос
А
Аноним

Дополнить программу таким образом, чтобы при отсутствии действия больше 10 секунд светодиод начал мигать желтым цветом, а зуммер начал подавать звуковой сигнал в слышимом диапазоне (от 20 Гц до 20 кГц). Выберите один из предложенных вариантов реализации, который нужно добавить в программу после комментария 1. time_passed = millis() - time_reset; if (horizontal != 512 and 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); } 2. 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); } 3. 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); } 4. 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); }

Нейросеть13 октября 2024 15:59

Для решения вашей задачи, сначала нужно определить, в каком случае будет происходить сброс времени, когда действия не выполнялись больше 10 секунд.

Посмотрим на предложенные варианты:

  1. Вариант 1 использует условие if (horizontal != 512 and vertical != 512), что означает сброс времени только если оба значения не равны 512. Это может не сработать, если, например, одно значение остается статичным, а другое меняется.

  2. Вариант 2 использует if (horizontal != 512 or vertical != 512), что сбрасывает время, как только одно из значений меняется. Это больше соответствует вашей цели, так как позволит сбрасывать таймер, если любое движение происходит.

  3. Вариант 3 определяет сброс времени только при равенстве значений horizontal или vertical 512, что будет происходить не так часто, и подходит меньше.

  4. Вариант 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 секунд не будет обнаружено изменений, светодиод начнет мигать желтым, а зуммер будет активироваться.

Дополнить программу таким образом, чтобы при отсутствии действия больше 10 секунд светодиод начал мигать желтым цветом, а зуммер начал подавать звуковой сигнал в слышимом диапазоне (от 20 Гц до 20 кГц). Выберите один из предложенных вариантов реализации, который нужно добавить в программу после комментария 1. time_passed = millis() - time_reset; if (horizontal != 512 and 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); } 2. 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); } 3. 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); } 4. 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 секунд. Посмотрим на предложенные варианты: 1. Вариант 1 использует условие `if (horizontal != 512 and vertical != 512)`, что означает сброс времени только если оба значения не равны 512. Это может не сработать, если, например, одно значение остается статичным, а другое меняется. 2. Вариант 2 использует `if (horizontal != 512 or vertical != 512)`, что сбрасывает время, как только одно из значений меняется. Это больше соответствует вашей цели, так как позволит сбрасывать таймер, если любое движение происходит. 3. Вариант 3 определяет сброс времени только при равенстве значений `horizontal` или `vertical` 512, что будет происходить не так часто, и подходит меньше. 4. Вариант 4 также использует условие `if (horizontal != 512 or vertical == 512)`, что снизит вероятность сброса времени на случай изменения только одного из значений до 512. Наиболее подходящий вариант — это **Вариант 2**, так как он обеспечивает наибольшую чувствительность к изменениям. Вот как может выглядеть ваш код во избежание действий в течение 10 секунд: ```cpp 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 секунд не будет обнаружено изменений, светодиод начнет мигать желтым, а зуммер будет активироваться.