Программа дежурного режима для усилителя

Что именно вам не понятно в моем вопросе:

???

Оператор for
он выполняется в программе реально 60 раз, засекал, но я не могу сбросить его никак, и в этом и есть мое непонимание, поэтому и прошу помощи. Вы меня можете понять?

если хотите цикл с условием то это к примеру do …while

Ну если вы продолжаете, тогда я могу сказать вам лишь одно:
Ваша задача лишь немного сложнее, чем реализована вот тут: Мигаем светодиодом без delay() | Аппаратная платформа Arduino

Да ладно! Было бы так давно бы была решена…нечто подобное писал человеку для включения в авто компьютера…он был сильно удивлён, что там было много строк )))

Ладно ТС, код наколенный но работать будет…лови…

#define PIN_RELAY LED_BUILTIN //10
#define AUDIO A0

bool is_on;
int val;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, LOW);
}

void loop() {
  val = analogRead(AUDIO);
  if (val > 300 && !is_on) {
    Serial.println("Появился сигнал");
    delay(1000);
    digitalWrite(PIN_RELAY, HIGH);
    Serial.println("Включили усилитель");
    is_on = true;
  } // включили через 10 секунд после появления сигнала

  do {
    val = analogRead(AUDIO);
  } while (val > 300);  // крутимся в вечном цикле пока есть сигнал

  if (val < 300) {
    int i = 0;
    do {
      delay(100);
      i++;
      val = analogRead(AUDIO);
    } while (val < 300 && i < 100);  // крутимся в цикле пока нет сигнала или задержка < 60 секунд
    Serial.println("Вышли из цикла задержки выключения или отсутствия сигнала");
  }

  if (val < 300 && is_on) {
    digitalWrite(PIN_RELAY, LOW); // сигнал так и не появиля, выключаем усилитель
    Serial.println("Выключили усилитель, сигнал так и не появился");
    is_on = false;
  }
  if (val > 300 && is_on) {
    Serial.println("Появился сигнал, усилитель не выключаем");
  }
}

спасибо

Спасибо за подсказку. Написал сам только что, работает как положено… Код таков:

#define REL 10
#define AUDIO A0
int state = 0;
unsigned long counttime;
void setup() {
pinMode(REL, OUTPUT);
pinMode(AUDIO, INPUT);
}
void loop() {
if (analogRead(AUDIO) >1000) {
digitalWrite(REL, HIGH);
state = 1;
}
if (analogRead(AUDIO) == LOW && state == 1) {
counttime = millis();
state = 0;
delay(1000);
}
if (millis() - counttime >= 60000) {
digitalWrite(REL, LOW);
}
}

запускается от порога 4,9 В и выше, можно поставить сколь угодно…

вот это мне не нравится:

if (digitalRead(AUDIO) == LOW && state == 1) {
``` то ты его как аналоговый читаешь, то как цифровой...

да, верно, поправил
Спасибо)

попробуй мой код, работает - нет?

после подачи лог 1, на плате ардуинки загорается светодиод, потом гаснет после 10 сек, но на выходе ничего нет

ну ты же исправь скетч в самой верхней строке на номер своего пина реле )))

да, работает)
я так понимаю задержка поставлена на 10 сек, меняем delay и получаем нужное время

да, в цикле задержку уменьшил до 100 миллисекунд, так что добавляем количество циклов, сейчас их 100

    do {
      delay(100);
      i++;
      val = analogRead(AUDIO);
    } while (val < 300 && i < 100);  // крутимся в цикле пока нет сигнала или задержка < 60 секунд
    Serial.println("Вышли из цикла задержки выключения или отсутствия сигнала");
  }

Так то по задаче пофиг, конечно же, но за чем плохому учишь? Учи сразу разрушительному ))))

А учебник читать не пробовали?
Существует 3 вида цикла, и for - совсем не тот, который подходит для Вашей задачи.

Звучит оскорбительно, думаю, если Вы взрослый человек, то унижать за то, что я или не важно кто на моем месте, попытался за один вечер без основ и знаний, что-то написать…, во благо, не во вред, точно не стоит.
Учебника нет, читал в интернете всю инфу по всем видам циклов и написано было выше, что пробовал переписать несколько раз эту часть программы.
В любом случае и Вам спасибо за вашу помощь, которая выглядит в таком виде, Ваше мнение и Ваше внимание и Вы конечно же большой Молодец, что читали книгу в отличие от меня.
Меня натолкнули выше на мысль использовать таймер и задача выполнена.
Добра Вам!

Спасибо за программу) Отличная реализация)

1 лайк

Раз устраивает - пользуйся )))

1 лайк

Не получится.

На правильную мысль Вас пытался натолкнуть как раз Андриано - прочитать, наконец, учебник.

3 лайка

Думаете уже надо? Может он на одной конструкции остановится…