Официальный сайт компании Arduino по адресу arduino.cc
класс титановый велосипед для delay без delay().
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 01/02/2016 - 22:33
класс титановый велосипед для delay без delay().
динамически управляемая генерация событий с динамически изменяемым интервалом времени между событиями.
Хорошо, но на мой взгляд, не удобно. Не понятно зачем в цикле каждый раз делать read(100)
Надо бы так: Создаем объект, Указываем периодичность события, В цикле остается только
if
(nD_01.push_tick) {код чего-то;}
Хорошо, но на мой взгляд, не удобно. Не понятно зачем в цикле каждый раз делать read(100)
кому не удобно?
на самом деле это не read(100) , а read(n) , где n может измениться далее в коде.
т.е. read(100) является частным случаем read(n).
Надо бы так: Создаем объект, Указываем периодичность события, В цикле остается только
if
(nD_01.push_tick) {код чего-то;}
я не знаю как проверять актуальное значение nD_01.push_tick без read(100).
покажи как - сделаю.
выпилил переменную *.push как странную.
теперь класс генерит одно событие TRUE *.tick в течении одного цикла программы.
Это нужно вешать на прерывания, что бы инициация событий возникала по истечению периода, а не "удалять гладны автогеном" :) Вот тогда будет "титановый".
Это нужно вешать на прерывания, что бы инициация событий возникала по истечению периода, а не "удалять гладны автогеном" :) Вот тогда будет "титановый".
возьми и сделай, если тебе нужно, что бы...
*кому не требуется жёсткий real time, тот поймёт почему в строке
if
(current - previous > interval)
написано ">", а не "==" .
Это нужно вешать на прерывания, что бы инициация событий возникала по истечению периода, а не "удалять гладны автогеном" :) Вот тогда будет "титановый".
Вро де бы и здорово активировать прерывания по таймеру и далее инициировать события в зависимости от установленных интервалов. Но, как известно, обработчик прерывания должен быть максимально коротким и простым, дабы оставалось время на исполнение остальной программы. А если таких событий десяток и работают они то сетью Ethernet, то сетью построенной на nRF24, тогда как быть?
народ, все все титановые велосипеды(их будет есчё) являются производными примера Мигаем светодиодом без delay() - вы видите в примере хардкор и реалтайм? я - нет.
не более.
народ, все все титановые велосипеды(их будет есчё) являются производными примера Мигаем светодиодом без delay() - вы видите в примере хардкор и реалтайм? я - нет.
не более.
Все таки предложу свою реализацию, ТС - вы не против? Если пртив - удалю.
Все таки предложу свою реализацию, ТС - вы не против? Если пртив - удалю.
ты точно уверен, что это именно твоя реализация, а не твоя редакция моего кода?
*ну...
boolean tick() нормальный ход
а,
if
(!s) {
return
false
; }
сломает current - previous > interval при старте т.к. current обновляется постоянно, а previous стоит.ну, не знаю - нужно смотреть ещё возможные тараканы.
Я на авторство не претендую. Идея полностью твоя, но мое виденье реализации :)
Помнишь в начале я написал: Надо бы так: Создаем объект, Указываем периодичность события, В цикле остается только
if
(nD_01.push_tick) {код чего-то;}
Тараканов можно изгнать, код сырой, прямо с колес, а под рукой ардуинки нет, что бы проверить.
Мне не нужно ! Ни разу :) Если честно, я вообще не понимаю зачем это...
Кстати, а почему именно '>' , а не '>=' ?
Мне не нужно ! Ни разу :) Если честно, я вообще не понимаю зачем это...
ок. люди делятся на два типа - те, кто не понимает и те, кто понимает.
Помнишь в начале я написал: Надо бы так: Создаем объект, Указываем периодичность события, В цикле остается только
if
(nD_01.push_tick) {код чего-то;}
помню - я ж не прогрммист, просто не знал, как сделать boolean tick()
Мне не нужно ! Ни разу :) Если честно, я вообще не понимаю зачем это...
Это для таких как я и еще хуже)))... Клапауций 322, благодарен за труд. Вы мне как-то посоветовали библиотеку Metro, а это, как я понимаю, более модифицированная ее версия?
Вы мне как-то посоветовали библиотеку Metro, а это, как я понимаю, более модифицированная ее версия?
практически то же самое, но для себя.
в Метро зачем-то myname.reset() - что там сбрасывать не знаю.
в Метро зачем-то myname.reset() - что там сбрасывать не знаю.
Я этой строчкой пользуюсь, к примеру, когда необходимо, чтобы какой то интервал сбросился, если, допустим, нажали кнопку для входа в меню дисплея, а на дисплее перед этим каждые 5 секунд менялась инфа всякая... Подозреваю, что это все можно сделать и другими путями, но я их пока не знаю.
Я этой строчкой пользуюсь, к примеру, когда необходимо, чтобы какой то интервал сбросился, если, допустим, нажали кнопку для входа в меню дисплея, а на дисплее перед этим каждые 5 секунд менялась инфа всякая... Подозреваю, что это все можно сделать и другими путями, но я их пока не знаю.
у меня это *.stop()
Хорошо, но на мой взгляд, не удобно. Не понятно зачем в цикле каждый раз делать read(100)
на самом деле это не read(100) , а read(n) , где n может измениться далее в коде.
т.е. read(100) является частным случаем read(n).
возвращаемся к тому, с чего начали - read(n) необходим для динамического изменения интервала.
иначе, придётся вызывать start(n) загромождая код if-фами вместо простого наличия read(n) в коде, плюс n у нас может измениться в то время когда генерация находится в состоянии stop() .
*вердикт - версия #7 считается актуальным релизом.
подключение кода класса как библиотеки #186
Хорошо, но на мой взгляд, не удобно. Не понятно зачем в цикле каждый раз делать read(100)
на самом деле это не read(100) , а read(n) , где n может измениться далее в коде.
т.е. read(100) является частным случаем read(n).
возвращаемся к тому, с чего начали - read(n) необходим для динамического изменения интервала.
иначе, придётся вызывать start(n) загромождая код if-фами вместо простого наличия read(n) в коде, плюс n у нас может измениться в то время когда генерация находится в состоянии stop() .
*вердикт - версия #7 считается актуальным релизом.
Да я и не настаиваю :) Просто read(n) нужен далеко не в каждой итерации loop, а только для изменения интервала, что легко реализуется добавлением соответствующего метода, например ChangeInterval(n).
Ладно все, я просто предложил альтернативный вариант, а дальше кто как хочет.
PS для подключения не обязательно использовать h-файл, можно просто код класса в начало скетча поставить.
Просто read(n) нужен далеко не в каждой итерации loop, а только для изменения интервала, что легко реализуется добавлением соответствующего метода, например ChangeInterval(n).
ну, я ещё напишу велосипед Change(n) - пусть делает TRUE, если изменилась n.
или, о чём это всё, если так или иначе, что то можно в классе сократить, но это что-то вылазит к код скетча.
*ок. а почему так ужасен вызов read(n) при каждом цикле программы? - мне кажется, что проверка Change(n) грозит большими накладными расходами, чем просто перезапись n.
PS для подключения не обязательно использовать h-файл, можно просто код класса в начало скетча поставить.
можно все библиотеки с код скетча слить.
минорное обновление:
Извините за глупый вопрос, но...
Почему в примере "blink без delay" проверка астанавливается на строке:
noDELAY nD_01;
пишет: noDELAY does not name a type
Почему в примере "blink без delay" проверка астанавливается на строке:
потому, что нужно внимательно читать тему:
#7 выпилил переменную *.push как странную.
поэтому пример для версии кода класса #26 будет выглядеть так:
arduino-1.6.8
я буду логи читать и подключать класс как библиотеку?
#2
Так и сделано.
Так и сделано.
не ври.
А я как .txt сохранял.
теперь на этой строчке останавливается:
if (nD_02.tick) {digitalWrite(15, !digitalRead(15));}
и ошибка:
А я как .txt сохранял.
ещё один вопрос и ты идёшь нахуй.
сохранить в этой папке с именем class_noDELAY.h
Душевно.... но новобранцы не оценят. надо же любя....
Душевно.... но новобранцы не оценят. надо же любя....
а, никто и не набирает тут армию кретинов.
Клапауций 322, по #26
если не затруднит, со следующим обновлением оторматируйте текст программы с нормальными отступами, будь ласка. Так совсем структуру не вижу. спасибо
ок. по многочисленным просьбам ползателей форума - у кого отсутвует нормальный текстовый редактор и комбинация клавиш Ctrl+C, код будет дублироваться авторским картинко, где структура кода читается построчно.
ага , в ipad mini отсутствует кнопка ctrl. Ты изобрёл способ борьбы с начинающими лентяями на форуме. Картинками им выдавать ответы надо. Пусть руками работают. :)
минорное обновление:
Маленькая непонятка по плавному включению с использованием класса.
if (digitalRead(SW) == LOW && prog == 1) {
if (val < spd && timer3.tick ){
val++;
analogWrite(LED, val);
}
}
Работает только при удержании кнопки. Как сделать по однократному нажатию?
Маленькая непонятка по плавному включению с использованием класса.
Работает только при удержании кнопки. Как сделать по однократному нажатию?
Megawollt, я третий раз прошу прочитать описание класса, вникнуть в суть его работы и, только затем задавать вопросы, не относящиеся к использованию класса.
Я стараюсь, но пока не получается. Надеюсь на твою помощь в ответе
Я стараюсь, но пока не получается. Надеюсь на твою помощь в ответе
заведи переменную типа boolean равную 0, меняй эту переменную на 1 нажатием кнопки и на 0 при условии val == 255. по условию равенства этой переменной 1, запускай процесс увеличения val с использованием класса
Спасибо
Осталось непонятным зачем требуется именно "класс", когда вполне можно обходится типа таким макросом:
И по мне так очень удобно, из кода исчезают множественные проверки..
Осталось непонятным зачем требуется именно "класс", когда вполне можно обходится типа таким макросом:
осталось непонятным, почему я-радиомонтажник этим занимаюсь, а ты-программист - нет.
Наверное потому, что я неплохо знаю цену всему "классному" подходу и пользую его ровно там, где оно того стоит, не? :)
Наверное потому, что я неплохо знаю цену всему "классному" подходу и пользую его ровно там, где оно того стоит, не? :)
если бы знал, что не генерил бы быдлокод
12
#define everyMillis(interval, action) \
13
{ \
14
static
unsigned
long
t = 0UL; \
15
if
( millis() - t > (interval) ) \
16
{ \
17
{ action; } \
18
t = millis(); \
19
} \
20
}
А где тут генерится "быдлокод", покажешь? :)