Задержка включения выхода

Спасибо

А “сбрасывать” этот самый счетчик будете когда изменяется состояние выхода.

1 лайк

Разбираю пример

const int buttonPin = 3;            // Кнопка
const int ledPin = 6;               // Светодиод
unsigned long taiming;              // Переменная ТАЙМИНГ (точка отсчёта)
bool ledOn;                         // Переменая которая хранит значение ЛедОн (0 или 1)

void setup() {
 pinMode(ledPin,OUTPUT);            // Светодиод это Выход
 pinMode(buttonPin,INPUT);          // Кнопка это Вход
 ledOn = false;                     // Обозначаем начальное стостяние переменной ЛедОн=0
}
void loop() {
 if (digitalRead(buttonPin)== HIGH) // Если кнопка не нажата и на входе 1
 {
  digitalWrite(ledPin,HIGH);        // Следовательно если на входе 1 то и на выходе 1
  ledOn = true;                     // Переводим переменную в 1
  taiming = millis();               // ??????????????
 }
 if(ledOn)                          // Переменная сменила своё значение (в данному случае потому что digitalRead(buttonPin)== LOW)
 if(millis() -taiming > 2000)       // Начиаем отсчёт
 {
  digitalWrite(ledPin,LOW);         // По истечению заданного времени переводим вывод в 0
  ledOn = false;                    // А переменной присваиваем значение 0
 }
}

Вопрос №1 Что делает строка 16?
Вопрос №2 Верны ли остальные комментарии к строкам?

Победил, но есть вопросы

Подготавливает переменную для использования в строке 19.

1 лайк

На этот вопрос невозможно ответить, не видя принципиальной схемы.

На этот вопрос невозможно ответить, не видя принципиальной схемы.
[/quote]

Либо пин кнопки нужно притянуть к VCC резистором 10кОм, либо в строке 8 сделать так

pinMode(buttonPin,INPUT_PULLUP);          // Кнопка это Вход

Во-первых, это не принципиальная схема, а монтажная (по ней удобно собирать устройство, но крайне неудобно анализировать работу).
Во-вторых, скетч и схема не соответствуют друг другу: на схеме есть детали, никак не отраженные в скетче
Ну а в-третьих, Вам уже указали на отсутствие подтяжки кнопки.
9-я строка по сути лишняя (без нее будет работать точно так же).
Комментарий в 14-й строке должен быть “Зажигаем светодиод”.
Комментарий в 18-й строке должен быть “Если светодиод горит”.
Комментарий в 19-й строке “Если прошло больше двух секунд”.

Только Вы проверьте логику программы. Для Вас получается, что “поступил сигнал” это “подали на Ардуину питание при отпущенной кнопке”. Это действительно то, чего Вы хотите?

Еще 20 с небольшим лет назад инициализировать переменные считалось хорошим тоном. Как меняется всё и вся… :slight_smile:

Это надо было делать в 4-ой строке. И, кстати, в третьей, заодно, тоже.

Это если в “стиле Си”, а в “стиле ардуино” все происходит в блоке setup() (не зря же его так назвали? :smiley: )

Прямо как будто с тех пор изобрели новый язык с новыми правилами инициализации.

Может, 200? Не?
А то тогда и вода была мокрее…
Выскажу осторожное предположение, что наличие либо отсутствие необходимости инициализировать переменные зависит от типа переменных и от языка программирования, но никак не от периода истории.
Впрочем, если Вы не знаете ни одного, ни другого, ни третьего, тогда - “да”, все переменные следует вручную инициализировать перед использованием.

Вопрос уже и решённый. Спасибо всем кто откликнулся и помог разобраться, особое Спасибо andriano и BOOM