Помогите с SimpleTimer.
- Войдите на сайт для отправки комментариев
Хочу разобраться с работой SimpleTimer.
В библиотеке в файле SimpleTimer.txt нашел такое:
"Чтобы навсегда забыть о millis(), lastMillis, previousMillis и расстановке флагов
посмотрите простенькую бибпиотеку:
http://arduino.cc/playground/Code/SimpleTimer
Сказка!
В сетупе
timer.setInterval(15000, RepeatTask);
timer.setTimeout(10000, OnceOnlyTask);
timer.setInterval(1000, DigitalClockDisplay);
timer.setTimer(1200, TenTimesTask, 10);
В лупе только timer.run();
Сама с миллисами работает,
можно выполнять единожды, можно энное количество раз, можно периодически...
Таймеры можно разрешать, запрещать, удалять, рестартовать как угодно(но обычно это не надо)
Очень удобно работает setTimeout - вставляется вместо delay()
"
Решил испытать простоту. Но....
#include <SimpleTimer.h> int LED =16; int LED2 =15; int buttonPin = 3; int buttonState = 0; SimpleTimer timer; void OnceOnlyTask() { digitalWrite(LED,LOW); digitalWrite(LED2, HIGH); } void setup() { timer.setTimeout(2000, OnceOnlyTask); pinMode(LED, OUTPUT); pinMode(LED2, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { timer.run(); } else { digitalWrite(LED, HIGH); digitalWrite(LED2, LOW); } }
Не работает как я хочу- (по нажатию кнопки задержка 2 сек и потом леды меняют состояние)
Если кнопку нажимаешь сразу после загрузки бутлоадера-какая-то задержка есть. А если нажимаю кнопку после 2 сек - леды переключаются сразу.Получается таймер сразу начинает работать , до команды timer.run();
1. как подключена кнопка?
2. рекомендую почитать вот тут http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
Кнопка подключена к +5в и к 3му выводу,который через 10кОм подключен к земле.
И я бы хотел научиться пользоваться SilpleTIMER. В примерах все понятно . а на практике как использоать -не пойму. (Уровень IQ ARDU=0,00001-начинающий.)
В библиотеке в файле SimpleTimer.txt нашел такое:
"Чтобы навсегда забыть о millis(), lastMillis, previousMillis и расстановке флагов
посмотрите простенькую бибпиотеку:
http://arduino.cc/playground/Code/SimpleTimer
Сказка!
В сетупе
timer.setInterval(15000, RepeatTask);
timer.setTimeout(10000, OnceOnlyTask);
timer.setInterval(1000, DigitalClockDisplay);
timer.setTimer(1200, TenTimesTask, 10);
В лупе только timer.run();
Сама с миллисами работает,
можно выполнять единожды, можно энное количество раз, можно периодически...
Таймеры можно разрешать, запрещать, удалять, рестартовать как угодно(но обычно это не надо)
Очень удобно работает setTimeout - вставляется вместо delay()
"
Решил испытать простоту. Но....
Не работает как я хочу- (по нажатию кнопки задержка 2 сек и потом леды меняют состояние)
Если кнопку нажимаешь сразу после загрузки бутлоадера-какая-то задержка есть. А если нажимаю кнопку после 2 сек - леды переключаются сразу.Получается таймер сразу начинает работать , до команды timer.run();
Странно, "В библиотеке в файле SimpleTimer.txt" нашел...
Это мой комментарий на форуме...
Все не так сложно, попробуйте вот это:
Через 2 секунды после замыкания на землю третьего (3) входа платы
включает светодиод на 13 выходе и затем через секунду его выключает.
Спасибо ,trembo .Попробовал ваш код немного изменив его, так как у меня кнопка подключена к 5в и вход подтянут к земле через 10кОм.
Все ОК. Буду эксперементировать дальше для более полного понимания.
То же пытаюсь разобратся с данной библиотекой. Возник вопрос, как остановить timer.setTimeout, если произошло нажатие на кнопу ON в течении 60 секунд после нажатия кнопки OFF, пока идет отчет времени? По моему мнению, что то должно быть вместо заков вопроса, нон не могу понять что.
http://playground.arduino.cc/Code/SimpleTimer#F_disable
http://playground.arduino.cc/Code/SimpleTimer#F_disable
Я видел данный оператор, но не понял как его использовать. Что такое timerId?
Порядковый номер таймера, в вашем случае это 0 или 1.
Порядковый номер таймера, в вашем случае это 0 или 1.
Попробовал и 0 и 1 не получается, таймер не останавливается.
Я так понимаю, что timerId должен как то объявлен, но все равно не разберусь как.
Да и вообще переставайте пользоваться такими бесполезно-"полезными" библиотеками!
maksim, спасибо!
Первый вариант с библиотекой SimpleTimer, что то всеравно не работает, зато великолепно работает второй вариант, сейчас пытаюсь разобратся и адаптировать для своих нужд. Так как с ардуино начал разбиратся совсем недавно есть несколько вопросов.
1. (!digitalRead(buttonPinON)) это аналог (digitalRead(buttonPinON) == LOW) при условии, что в setup задано digitalWrite(buttonPinON, HIGH);?
2. Для чего static?
3. Почему uint32_t, я так понимаю это заданно 32 бита, а не int?
4. И чем принципиально отличается int buttonPinON = 5; и #define buttonPinON 5?
..... Возник вопрос, как остановить timer.setTimeout .....
http://playground.arduino.cc/Code/SimpleTimer#F_setTimeout
After f has been called, the interval is deleted, therefore the value timerId is no longer valid.
Он и так однократный по своей природе: запустили когда надо, отработал и исчез, совсем исчез.
В отличии от setInterval который всегда работает.
Да и вообще переставайте пользоваться такими бесполезно-"полезными" библиотеками!
Не совсем согласен.
Глядя на это я вижу что через 60 секунд выполнится LED_ON
А вот глядя на это... таких чЮвств почему-то не возникает...
Я хочу написать почти человеческим языком:
Через столько-то времени влючи ,пожалуйста, светодиод,
а какой там millis разберись сам, прошу Тебя, о Великий и Могучий Ардуин!
Я хочу ...
Только потом не удивляйтесь, если выполнив вашу хотелку, микроконтроллер не осилит собственно саму задачу - все весьма ограниченные ресурсы могут быть израсходованы намного быстрее, чем вы того хотите.
1. (!digitalRead(buttonPinON)) это аналог (digitalRead(buttonPinON) == LOW) при условии, что в setup задано digitalWrite(buttonPinON, HIGH);?
2. Для чего static?
3. Почему uint32_t, я так понимаю это заданно 32 бита, а не int?
4. И чем принципиально отличается int buttonPinON = 5; и #define buttonPinON 5?
1. Да и без условий digitalWrite() для вывода настроенного на вход включает "подтяжку".
2. Что бы не обьявлять переменную глобально.
3. http://arduino.ru/forum/programmirovanie/vopros#comment-8495
4. Тем что int занимает в памяти 2 байта, а #define ничего.
Тут еще немного про static написано.
Вот тут во втором примере показано как работать со ссылкой на таймер http://blog.ilyaplot.ru/arduino_setinterval/
Если нужно добавить второй, добавляем перед setup() строчку
а в setup() пишем
где interval - задержка, а callback - функция
Вообще в документации все хорошо описано. Посидите со словарем.
Никаких int ledTimer2; и ledTimer2= ...... прочтите , там всё разжёвано:
http://arduino.ru/forum/programmirovanie/pomogite-s-simpletimer#comment-...
в ledTimer2 пишется int таймера. Потом через эту переменную можно управлять таймером. Не надо управлять - не нужна переменная.
в ledTimer2 пишется int таймера. Потом через эту переменную можно управлять таймером. Не надо управлять - не нужна переменная.
помогите пожалуйста написать код без использования delay()
нужно, чтоб ардуинка в процессе на кнопку реагировала.
прошу прощения за ламерский вопрос, всю голову себе сломал.
Мигаем светодиодом без delay()
Максим, спасибо за наводку, я все это уже изучил. Но не могу применить на пяти светодиодах, точнее если нужно одновременно всеми помигать, то это пожалуйста, а вот чтоб сначала первый вкл. выкл., затем второй вкл. выкл и т.д., не получается.
Тезка, спасибо огромное!
Я не смог выйти за границы цыкла(
Не расскажите, что означает static uint32_t, конкретно интересует uint32_t, не гуглится).
http://arduino.ru/forum/programmirovanie/vopros#comment-8495
помогите пожалуйста написать код без использования delay()
нужно, чтоб ардуинка в процессе на кнопку реагировала.
прошу прощения за ламерский вопрос, всю голову себе сломал.
Нашол вот такую штуку для помигать с разным или одинаковым периодом
А вообще когда писал код, то столкнулся с проблемой замирания программы при выполнении delay()
Стаж у меня не большой, поэтому о существовании библиотек решающих проблему не знал.
Написал вот такую Функцию которая и выручает меня все время
что-то не могу разобраться как с этим SimpleTimer сделать такое:
а) раз в сутки в 19 часов включить LED1 на 5 минут. Ну или хотя бы просто раз в сутки, то с какого момента тогда будет отсчет?
б) то же самое, но дважды в сутки для LED2.
1. Вам нужны часики.
2. Очччччень коряво можно сделать примерно так:
Запускаем timer.setTimeout( 19часов, ЛЕД1_ОН);
В Таске ЛЕД1_ОН включаем ЛЕД1, запускаем таймаут на 5 минут - таск ЛЕД1_ОФФ.
В таске ЛЕД1_ОФФ выключаем ЛЕД1, и запускаем новый таск на (4 часа 55 минут)
Его срабатывание запускает ЛЕД1_ОН
Можно удалить, перенёс в новую тему.
http://arduino.ru/forum/programmirovanie/taimer-s-2-mya-usloviyami
В скетч особо не всматривался. Но судя по нему вы освоили работу с миллис. Зачем вам библиотека SIMPLE TIMER?Для наглядности?Что-бы как delay вставлять?
Здраствуите,
как сбросить таймера при перехода состояния start_stop пина.
Есть очень удобная альтернатива SimpleTimer - библиотека plcStandardLib_1, она содержит таймеры и триггеры. Есть подробное описание и примеры. Она портирована из среды программирования промышленных контроллеров - CodeSys. Работает напрямую с пином. Настройки наглядно видно всего в двух строчках.
Доброе время. Подскажите как применив библиотеку SimpleTimer заменить delay(500); я правильно понимаю, что нужно создать некую функцию, а потом её вызывать timer.setTimeout(500, функция); не могу сообразить, что в теле функции должно прописываться. Если не сложно покажите пример, скажем функции NOdelay () {...}. Спасибо.