автоматизация (таймер)
- Войдите на сайт для отправки комментариев
Чт, 23/08/2012 - 11:44
Доброе время суток.
Помогите разобратся с таймером. Задача заключается в том чтобы ардуино давала импульс на тригер (не знаю так или нет, сам не электронщик-сори) ну дапустим каждые 12 часов, т.е. включал и выключал свет каждые 12 часов
delay (720000); не?
я тоже думал об delay ! получается delay (43200000); // 12 часов пауза! но верное ли решение ? я не профи и поэтому спрашиваю !
можно условие создать с millis()
и добавить счётчик
можно условие создать с millis()
и добавить счётчик
Приведенный алгоритм имеет два недостатка:
- в связи с особенностями целочисленного деления устройство будет непрерывно "делать что-то" в течение целого часа - пока частное от деления millis()/val не примет значение 13.
- это безобразие произойдет только по прошествии первых 12 часов (многократно до истечения 13-го часа - см. выше). Дальше условие if(hour == 12) перестанет возвращать значение "истина" и обработка больше никогда не повторится - только перезапуск микроконтроллера поможет.
step962
А что вы можете посоветовать ? юзать delay ?
больше никогда не повторится - только перезапуск микроконтроллера поможет.
зациклить можно же.
ну и как вариант использовать библиотеку MsTimer
Можно использовать TimerOne - в прерывании прибавлять по секунде, когда пройдет 12*60*60, то формировать импульс и сбрасывать переменную. Тогда loop() будет свободен - можно еще че-нить делать ;)
Кстати, глянул MsTimer - тоже прикольная штука. Юзает TIMER2, похоже, что PWM, связанный с ним, будет продолжать работать, но с частотой 1 кГц и не на весь диапазон.
Ну что тут можно посоветовать? Переписать. Например, так:
step962
простите нуба но не могли бы вы полностью пример привести на примере блинка ? а то не могу все воедино собрать =(
Ну "нубство" это проходящие достоинство. Нужно только пытатся, смотреть примеры что идут в документации, эксперементировать.
К сожалению вы не указали от чего вы питаете ардуину. Если от блока питания - то предложенный подход вполне нормален.
А вот если вы "питаетесь от батарейки", то это конечно уже "расточительство" крутить холостой цикл в течении такого времени.
Тут желательно "засыпать" и просыпатся по таймеру. Примерно вот так:
http://donalmorrissey.blogspot.com/2011/11/sleeping-arduino-part-4-wake-...
Правда "заснуть" на 12-ть часов не получится таким образом. Макимум на 4.1 секунды. Но все равно "хлеб". Так будет намного экономней: просыпатся на пару микросекунд раз в 4-ре секунды. Проверять что "12-ть часов еще не прошло" и "засыпать обратно", чем "все время молотить электричество".
Правда "для нуба" эта статья конечно "тяжело". Но... читать документацию... статьи... только так перестать нубом можно. А "выжимать" из контроллера максимум не зная его архитектуры - не получится.
Вот, скажем, со "слипом" можно так (не стал, правда, заморачиваться с отключением питания перефирии)
Константа намеренно сделана =3, чтобы не ждать 12 часов при проверке - переключается каждые 3 секунды :)
Как я понял из приведенного кода step962 и leshak скетч отсчитывает 12 часов, выполняет задачу и уходит на очередной круг отсчета ?
Объясню задачу так : стоит террариум с лампой и вентилятором , задача в том чтобы лампа включалась на 8 часов и выключалась на 14 + каждые 2 часа включался вентилятор на 10 мин.
МК питается от БП и должен давать импульс (1 сек) на симистор который в свое время откроет ток на лампу на 8 часов, через 8 часов еще один импульс который закроет ток на 14 часов.
И параллельно этому всему делу каждые 2 часа МК будет включать мини вентилятор (3v) на 10 мин. Вот такая хитрая и для меня сложная задача. :(
Ну тогда так (неоптимально, конечно, решение "в лоб", но легче разобраться новичку)
Т.е. отcчет времени пойдет при включении МК или при сбросе ?
И вот > #define TimeLampOff (16*60*60) // 4 дня (через 8 часов) не совсем понял про 4 дня !
Да. Нужно сбросить в 0:00
4 дня :) только дошло :) Имел в виду 4 часа дня (4:00pm) или 16:00
AlexFisher
вы меня запутали совсем :) при старте в МК стоит время 0:00 (24:00) и включится лампа в 8:00? я правильльно понял ?
Ну вот видите, совсем и не запутал :) Все правильно :)
я новерно уже запарил, но то ли у меня инет с другой планеты, то ли .......хм! не могу найти библиотеки
<TimerOne.h>
<avr\sleep.h>
А чего искать? я же ссылку дал в посте #7 - на статью, в статье прямая ссылка.
avr\sleep.h - стандартная (если у Вас линукс, напишите avr/sleep.h)
Ребят, а помогите со скейтчем на шаговый двигатель
Его задача - Включаться каждый день в 7 утра и в 9 вечера, (один день в в воскресение что бы не включался!), сделать 5 полных оборотов за одну минуту в 7 утра, отключиться, и сделать это же самое в 9 вечера
Помогите пожалуйста дополнить код просто в этом не разбираюсь. У меня готовый код на часы (сегментные часы из светодиодной ленты)
мне нужно дополнить таймер чтоб получились Учебные часы во время урока идет время , а после урока /перемена показывался таймер по окончание перемены после чего начинается урок снова включались часы.
10;30 начинался таймер 10 мин , 12:10 начинался таймер 30 мин , 14:10 начинался таймер 10 мин , 15:50 начинался таймер 10 мин , 17:30 начинался таймер 10 мин, а выходные дни 10;30 начинался таймер 10 мин , 12:10 начинался таймер 10 мин , 13:50 начинался таймер 10 мин , 15:30 начинался таймер 10 мин , 17:10 начинался таймер 10 мин,
дополнить - это к автору скечча.