Замыкание контакта на пульте
- Войдите на сайт для отправки комментариев
Абсолютный новичок. Пришла идея (пока не разберусь со считыванием ИК сигналов и отправки их) пока просто замыкать кнопку на пульте ДУ.
Задача такая. Удаленно через Sonoff подается питание на ардуино. Ардуино замыкает контакт на пульте (с помощью оптрона, просто был под рукой понял как работает, вроде устраивает). Контакт замыкается на 600 миллисекунд. Не пойму как сделать всего одну операцию без цикла и желательно чтобы потом, если это возможно ардуино уснул. Ну не страшно если не уснет. просто через пару минут отключу питание на Sonoff. Мне пока хотя бы один раз запустить команду замыкания контакта.
Алгоритм:
1) Включил питание
2) Замыкается контакт на 0,6 секунд (опытным путем уже проверю потом). Операция выполняется 1 раз.
3) Больше ничего не выполняется или что то типа глубокого сна если возможно.
Пока моих знаний хватило на такой цикл.. Учусь..
void setup()
{ pinMode(4, OUTPUT); } void loop() { digitalWrite(4, HIGH); delay(600); digitalWrite(4, LOW); delay(600); }
Содержимое loop() перенести в setup()
с синтаксисом пока слабо. можете показать как правильно перенести?
К сожалению в ютуб ещё никто не выложил видео того, как делается copy-paste фрагментов кода.
Благодарю Вас всех за помощь. То что нужно! Заработало!
Возникла еще одна идея. По нажатию кнопки запускать таймер 30 минут чтобы выключить телевизор и тюнер автоматически. Постараюсь разобраться, если не получится снова приду к Вам)
Благодарю Вас всех за помощь. То что нужно! Заработало!
Возникла еще одна идея. По нажатию кнопки запускать таймер 30 минут чтобы выключить телевизор и тюнер автоматически. Постараюсь разобраться, если не получится снова приду к Вам)
Это да, сегодня все такие добрые )))
Не ожидал!!! Благодарю!!! Спасибо огромное!!!
Продолжаю изучать программирование с нуля. Понимаю сейчас, что в таком коде после нажатия кнопки и отработки задачи (отключения) по программе все равно идет циклический опрос до следующего нажатия кнопки. А его больше не будет. Это надо 1 раз в несколько дней например.
Есть ли какой то код дописать, чтобы программа отработала 1 раз после нажатия кнопки и ардуино уснула, больше не запускала цикл?
Фокус прописать в Setup не получится я так полагаю. Ведь постоянно надо опрашивать циклически (loop) и ждать нажатия кнопки.
Если это возможно. И вообще это нормальный режим, что ардуино например будет целый день ждать нажатия кнопки (или другого действия в других программах) и работать постоянно?
Нормальный режим это в строке пользовательского поиска сайта написать например - "пробуждение ардуины по кнопке"
благодарю. буду искать
Вообще, бесконечное выполнение программы до выключения по питанию - это нормальный режим для микроконтроллера. Если есть желание, можно сэмулировать остановку программы навсегда, пустым бесконечным циклом, но потом ардуину придётся либо передёрнуть по питанию, либо нажать ресет.
Нормальный режим это в строке пользовательского поиска сайта написать например - "пробуждение ардуины по кнопке"
это результат слишком доброго отношения в первых сообщениях ветки. Первый раз спросил - получил готовое, второй - опять подачка, зачем начинать думать, если в третий раз можно тупо спросить?
b707 - это не так. Тем кто разбирается зачастую сложно понять новичков, которым трудно иногда даже сформулировать в поиске как называется то что надо найти. Я перед тем как задать вопрос пробую насколько возможно найти что то, разобраться. Понимаю пока сам не разберусь будет очень сложно и не будут мне все время помогать. Хотя часто помогают. За что большое спасибо.
negavoid - спасибо большое. Буду пробовать, разбираться.
По поводу сна - пробуйте библиотеку "sleep.h"
за одно с прерываниями разберетесь ;)
Благодарю. Все рекомендованное буду изучать и пробовать.
"Благодарю Вас всех за помощь. То что нужно! Заработало!
Возникла еще одна идея. По нажатию кнопки запускать таймер 30 минут чтобы выключить телевизор и тюнер автоматически. Постараюсь разобраться, если не получится снова приду к Вам)" - смотрите в сторону библиотеки TimerOne.h. ...
Совсем в общих чертах ,идея такая. Таймер (девайс, встроенный в ардуино) будет насчитывать необходимое время, а по его истечению в основном цикле программы произойдет отключение. Если не понятно как, могу подсказать)
-
atmega328 скажу честно мне сейчас все непонятно) я на первой ступени изучения) Если с компонентами более менее понятно, как подключить чтобы работало - это я могу сделать. Готовые скетчи загружаю, более менее разбираюсь какая команда что делает.
Пока туго с синтаксисом языка программирования. Как правильно изменить и дополнить программу чтобы работало. Я хоть и пишу выше, что спасибо, разберусь и т.д - пока ничего не получается. Мне сейчас помогут только готовые скетчи, в которых я могу разобраться какая строка что делает. Что то написать самому мне пока не под силу. Многие думают что это участь халявщиков сразу получить скетч, но это не так.
Я просто не умею... пока что...
Идея моя простая. Нажал кнопку, через время (указанное в скетче) посылается сигнал на пульт. Хотелось бы чтобы это работало на батарейках а не от сети. Потому хочется чтобы потребление было минимальным.
Идея моя простая. Нажал кнопку, через время (указанное в скетче) посылается сигнал на пульт. Хотелось бы чтобы это работало на батарейках а не от сети. Потому хочется чтобы потребление было минимальным.
Классический подход. Полагаете, что увидите скетч "со снижением потребления", прочитаете, "разберетесь" и хренак - супердевайс сделан?
Так-то у меня тоже есть простая идея: я, крч, встаю утром, пью кофе, еду на работу. Там нажимаю пару раз на кнопки и возвращаюсь домой, заниматься досугом. А в конце месяца мне 8 тыщ долларов зарплаты перечисляют на карту. Это же просто, да?
"Так-то у меня тоже есть простая идея: я, крч, встаю утром, пью кофе, еду на работу. Там нажимаю пару раз на кнопки и возвращаюсь домой, заниматься досугом. А в конце месяца мне 8 тыщ долларов зарплаты перечисляют на карту. Это же просто, да?"
Смотрите в сторону ГосДумы. Ваш Кэп :)
Идея моя простая. Нажал кнопку, через время (указанное в скетче) посылается сигнал на пульт. Хотелось бы чтобы это работало на батарейках а не от сети. Потому хочется чтобы потребление было минимальным.
вы хватаетесь за все и сразу. оставьте пока "минимальное потребление" - это большой и довольно сложный раздел работы с МК.
Сосредоточтесь на основных приемах программирования, для начала изучите работу с миллис по примеру "блинк без делей"
Не надо клянчить готовые коды, практически в каждой статье по программированию есть примеры, учитесь переделывать их под свои нужды.
"Сосредоточтесь на основных приемах программирования, для начала изучите работу с миллис по примеру "блинк без делей" - millis - это своеобразный суррогат делей) Лучше сразу с таймером ,мне кажется.
Совсем в общих чертах ,идея такая. Таймер (девайс, встроенный в ардуино) будет насчитывать необходимое время, а по его истечению в основном цикле программы произойдет отключение. Если не понятно как, могу подсказать)
странноватая идея - использовать аппаратный таймер для отсчета получасовой задержки.... А если такиз задержек будет три или четыре - все, приехали, таймеры кончились? :)
нафига этот хардкор, когда один таймер в МК уже специально выделен для этого, используйте миллис
millis - это своеобразный суррогат делей
о, это новость :) Может и вам стоит проштудировать эту тему, прежде чем давать советы? :)
странноватая идея - использовать аппаратный таймер для отсчета получасовой задержки.... А если такиз задержек будет три или четыре - все, приехали, таймеры кончились? :)
Таймеры еще послужат, точнее ОДИН таймер на несколько задержек)
Делители никто не отменял - програмные имею ввиду, в самом обработчике). Таймер настроить на прерывание раз в 10 миллисекунд. Одна переменная-делитель (до 32767) получается задержка до 327 секунд, вторая переменная-делитель до 327*32767 секунд - с избытком хватит.
Код обработчика элементарный - с использованием if'ов.
Все ифы и вычисления переносим в обработчик прерывания, тормозя вообще все? Ход конём, ага.
ОДИН таймер на несколько задержек)
Делители никто не отменял - програмные имею ввиду, в самом обработчике). Таймер настроить на прерывание раз в 10 миллисекунд.
откройте для себя тайну работы миллис. Таймер вызывает прерывание раз в 1 мс и обновляент переменную, по которовый вы можете отсчитывать хоть 100500 задержек с помощью if-ов
Атмега328 - то что вы предлагаете - это рабочий вариант. Только он практически один в один повторяет миллис - нафига дублировать, тем более криво :)
"тормозя всё?" - что "всё" ? В данном случае тормозить-то нечего, система будет дрыхнуть полчаса по замыслу её создателя :)
" Таймер вызывает прерывание раз в 1 мс и обновляент переменную" - Те же яйца, только в профиль. Однако раз в 1 мс, а если нам хочется реже? А если чаще, то понятно - micros() :)
"тормозя всё?" - что "всё" ? В данном случае тормозить-то нечего, система будет дрыхнуть полчаса по замыслу её создателя :)
ну правда - добрый совет - почитайте про миллис. А то несолько смешно выглядит...
Однако раз в 1 мс, а если нам хочется реже?
вы прикалываетесь? - вы для ТС тоже будете подбирать делитель, чтобы таймер срабатывал раз в полчаса? - или все-таки счетчик используете? :)
"нафига дублировать, тем более криво " - так вроде чел учится) Ясно, что подобный девайс можно купить "прямой", ничего не изобретая, а он хочет сделать кривой, но свой :)
"ТС или счетчик ?" - так ТС - это и есть таймер-счетчик :)
"нафига дублировать, тем более криво " - так вроде чел учится)
это было не про ТС, а про вас.
Атмега, продолжайте развлекаться... мне надоело.
"это было не про ТС, а про вас."
Можно, допустим тупо подсчитать с помощью millis время от начала какого-либо события до текущего момента. millis можно вызвать как функцию с результатом типа long. А значит можно измерить весьма большой интервал времени с точностью до 1-ой миллисекунды.
И можно вообще не вспоминать ни про какие таймеры (хотя понятно, что millis использует прерывания).
Проще? Проще! Ну тут как говорится- на вкус и цвет :)
Можно, допустим тупо подсчитать с помощью millis время от начала какого-либо события до текущего момента. millis можно вызвать как функцию с результатом типа long. А значит можно измерить весьма большой интервал времени с точностью до 1-ой миллисекунды.
это вы мне пишете? :) спасибо за науку
ЗЫ научитесь уже правильно цитировать, программист вроде :)
Да пожалуйста, если не знали)
На самом деле это больше адресовано Топикстартеру.
Он же хочет науку - а основа науки, как известно - поиск наилучшего решения задачи на основе множества разных подходов :)