Нужна помощь: Кнопка, тайминг, реле
- Войдите на сайт для отправки комментариев
Пнд, 11/08/2014 - 10:11
Здравствуйте!
Помогите мне пожалуйста со скетчем, с апаратной я знаком.
Алгоритм такой:
Ардуинка при включении слушает кнопку на пине №X, и при нажатии, включает реле на пине №Y на 6 секунд 19 милисекунд в это время ардуинка на кнопку не реагирует (то-есть таймер на 6 секунд 19 милисекунд не перезапускает), а по истечению этого времени, не реагирует еще 10 секунд 53 милисекунды и сново уходит в ожидание команды с кнопки.
Нужно использовать функцию millis() , две константы#define RELAY_ON 6019 и #define RELAY_OFF 10053. Еще должна быть некоторая переменная offset, которая будет точкой отсчета для сравнения с millis(). также нужна переменная флаг для того чтобы нажатие на кнопку не вызывали никаких действий.
в цикле loop пишем: если кнопка нажата и флаг не установлен то установить флаг, задать точку отсчета, включить реле. Еще один оператор сравнеия - если флаг установлне и millis() - offset больше или равно константе RELAY_ON то выключить реле. Еще один оператор сравнения - если флаг установлен и millis() - offset больше или равно сумме констант RELAY_ON и RELAY_OFF то снять флаг.
Если проект расти не будет, то вполне сойдёт и delay(). Чтобы не реагировать на кнопку после запуска таймера, можно ввести переменную-флаг, состояние которой будет указывать на состояние кнопки, была нажата, или нет.
Попробуйте вот так (реле на пин 13):
Попробуйте вот так (реле на пин 13):
Спасибо. Вроде работает.
Но почему для такой простой функции нужен такой огромный код ?
Подругому не как ?
1SANTER1, ваш случай удобно реализовать используя внешнее прерывание (вывод под кнопку не изменять). Кнопка нажата - ничего. Кнопка -отжата, и счёт 5 секунд пошёл, я правильно понял?
1SANTER1, ваш случай удобно реализовать используя внешнее прерывание (вывод под кнопку не изменять). Кнопка нажата - ничего. Кнопка -отжата, и счёт 5 секунд пошёл, я правильно понял?
Несовсем так. Нажимается кнопка и с ней включается реле, через 5 секунд реле должно выключится деже если кнопка остается нажатой.
Спасибо. Вроде работает.
Но почему для такой простой функции нужен такой огромный код ?
Подругому не как ?
В каком смысле большой? Если по количеству строк, ну так выкинте из него защиту от дребезга. Будет немного меньше.
1SANTER1, ну тогда по идее только слово RISING поменять на FALLING
1SANTER1, ну тогда по идее только слово RISING поменять на FALLING
Ага :) Огромное вам спасибо.
Топикстартера нет, а про решение второй части вопроса никто не написал.
а по истечению этого времени, не реагирует еще 10 секунд 53 милисекунды и сново уходит в ожидание команды с кнопки.
Так скетч из 4 сообщения вам не подходит? Поменяйте тайминги и всё. По топикстартеру:
У меня получилось так
Библиотека Timer_P.h здесь
https://github.com/X-Dron/X-Dron_lib/archive/master.zip
Это для схемы со стягивающим резистором (INPUT_PULLUP и !digitalRead(KEY_PIN)