Что именно вам не понятно в моем вопросе:
???
Что именно вам не понятно в моем вопросе:
???
Оператор 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 - совсем не тот, который подходит для Вашей задачи.
Звучит оскорбительно, думаю, если Вы взрослый человек, то унижать за то, что я или не важно кто на моем месте, попытался за один вечер без основ и знаний, что-то написать…, во благо, не во вред, точно не стоит.
Учебника нет, читал в интернете всю инфу по всем видам циклов и написано было выше, что пробовал переписать несколько раз эту часть программы.
В любом случае и Вам спасибо за вашу помощь, которая выглядит в таком виде, Ваше мнение и Ваше внимание и Вы конечно же большой Молодец, что читали книгу в отличие от меня.
Меня натолкнули выше на мысль использовать таймер и задача выполнена.
Добра Вам!
Спасибо за программу) Отличная реализация)
Раз устраивает - пользуйся )))
Не получится.
На правильную мысль Вас пытался натолкнуть как раз Андриано - прочитать, наконец, учебник.
Думаете уже надо? Может он на одной конструкции остановится…