Реле времени на функции millis
- Войдите на сайт для отправки комментариев
Втр, 15/11/2016 - 01:46
Нужен код по которому по ЮАРТу я присылаю число допустим 60000, потом нужно когда это число пришло чтобы отработала функция времени в кторой включен один раз 5-й выход ардуины нано, на время которое я прислал по ЮАРТу на ардуино нано, после этого времени 5 вывод должен находится в лог. 0, но потом как снова прийдет число по ЮАРТу, должен опять 1 раз 5 вывод ардуины быть включен на то время которое пришло по ЮАРТу, то есть реле времени, задержки будут от 1мин(то есть 60000, до 12ч., то есть 43200000). Точность большая мне не нужна, поэтому часы реального времени применять не хочу.
Набросал код, но не работает
int out=5; char data; int loopTime=0; int i=0; void setup() { pinMode(out, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(out, 0); if (Serial.available() > 0 ) { data = Serial.read(); i=0; } loopTime=data; unsigned long currentMillis = millis(); while(i<1) { while(millis()-currentMillis<=loopTime) { digitalWrite(out, 1); } i++; } }
Очплохо. Как соотносится диапазон знаяений int с ожидаемым 43200000? Ищите в форуме про прием чисел с serial. Магию с переменной i вобще непонял. И не надо "долбить" порт в стр.24 (и 12 тоже) он понимает с одного раза. Оба цикла ненужные и даже вредные.
LoopTime назначил как unsigned
long, это я для примера по быстрому набросал, просто код большой, а это так для примера. А последовательный порт я всегда так пишу и читаю, и все было впорядке. Переменная i для того чтобы цикл когда на 5 выводе лог.1 выполнялся один раз после прихода числа по серийному порту.
LoopTime назначил как unsigned
long, это я для примера по быстрому набросал, просто код большой, а это так для примера. А последовательный порт я всегда так пишу и читаю, и все было впорядке. Переменная i для того чтобы цикл когда на 5 выводе лог.1 выполнялся один раз после прихода числа по серийному порту.
Работать не будет.
Вставьте после 14 строчки Serial.println(data); и посмотрите что выдаст в терминал.
Можно сделать примерно так:
Время только задается теперь в секундах.
//переход через ноль millis()
//переход через ноль millis()
Подправил. Если где ещё ошибки, не обессудьте, ухожу.
LoopTime назначил как unsigned
long, это я для примера по быстрому набросал, просто код большой, а это так для примера. А последовательный порт я всегда так пишу и читаю, и все было впорядке. Переменная i для того чтобы цикл когда на 5 выводе лог.1 выполнялся один раз после прихода числа по серийному порту.
Serial.read() считывает только 1 байт.
Код большой, это веб-сервер, на котором есть функция таймера, делей не вариант, так как остальной код в это время работать не будет.
Спасибо Nosferatu, работает почти как нужно, пытаюсь под себя сделать, и тестирую, я почти так и делал до этого, только не проверял отдельно кусок кода.
Добрый день!.
Тема наверное давно загнулась, но влез чтоб лишний раз неперегружать форум новыми темами:
Искал простейшего реле времени на ардуино и здесь и вгугле, чего-то не нашел. Простейшее подразумеваю что в нем несколько переменных резисторов и пару перемычек дя изменения функционала. Переменных резисторов изначально 2- интервал high и интервал low хотя бы для одного канала управления. Ну и перемычки на выносе 1-60 сек. 1-60мин.1-60 часов а также последовательно перемычка с резистором для канала LOW типа например (для одноразового срабатывания) . Если есть что-то подобное, подскажите пожалуйста! Не, то придется что-то придумать. Хотелось именно без кнопок и экранов, простенько, для производства чтоб под рукой валялось всегда. На 555 можно конечно но бедноват функционал выходит. Да и на микроконтроллере сейчас проще все делать.
Добрый день!
нужна помощь с реле временем,
задумка следущия ставим на дверь геркон, дверь открылась через три минуты если дверь не закрыть сработает серена
то есть для того чтобы дверь не держали открыто
написал скейч
Ну давай на код посмотрим, для начала )
Как-то так.
1. Код из #14 не компилируется.
2. Код из #13 компилируется.
Рассматриваем рабочий вариант (#13).
3. Почём сейчас скобки, что Вы на них экономите? Не завезли чтоль? Мошт отгрузить?
Приводим к читабельному виду и добавляем комментарии:
Я надеюсь намек понятен? А потом продолжим.
denis@davt.kz Наша песня хороша, начинай сначала #58
Задача решается через автомат с тремя состояниями. Дверь закрыта, дверь открыта, дверь открыта и сирена.
Все остальное это хождение по битому стеклу.
BOOM. Лучше этот код не править, а сразу слить в унитаз
denis@davt.kz Наша песня хороша, начинай сначала #58
Задача решается через автомат с тремя состояниями. Дверь закрыта, дверь открыта, дверь открыта и сирена.
Все остальное это хождение по битому стеклу.
BOOM. Лучше этот код не править, а сразу слить в унитаз
Мой посыл был не о коде, а начать думать головой (и код писать понятный). Но qwone есть qwone, ладно...
не судите строго в программирование полный ноль
код заказывал, что сделали то сделали, собрал схемку залил код вроде все работает но вот глюки бы убрать.
я только учусь помогите чем сможете избавится от глюков
1. Почему исполнитель (который и писал код) его не "допиливает"?
2. Если код не вами писан, то как же вам помочь? Ну разве что сделать ЗА ВАС? Это в платном разделе делается "Ищу исполнителя".
3. "я только учусь" - это не оправдание. Если действительно учитесь (хотите учиться) - тогда #15
код вроде все работает но вот глюки бы убрать.
который код, из #13?
Непонятно, о этом ли коде речь, в коде задержка минута, а вы пишете - три...
if
(millis() - timer > 60000) это для теста так то будет стоять 180000
чтобы "убрать глюки" измените эту строчку так:
напишите. поможет или нет
чтобы "убрать глюки" измените эту строчку так:
напишите. поможет или нет
большое спасибо!!! помогло, глюк вроде ушел.