t = 0UL приведёт к тому, что например при запуске everyMillis(1000, blink() ) когда допустим millis() == 120 сделает blink() не через 1000 миллисекунд, а через 880 миллисекунд.
когда millis() будет больше interval, то вообще - сразу.
быдлокод? - не, не слышал.
*исправить на t = millis()
if( millis()...
...
t = millis();
разрыв пространственно-временного континуума? - не, не слышал. у моего секундомера две стрелки - на одну я смотрю, перед тем, как что-то делать, а на вторую - после.
зачем я так делаю и куда я деваю разницу значений? какая вжопу разница?
*исправить: ввести единую переменную для работы с millis() - unsigned long current = millis();
Да, t=0UL; приведет к этому. В случае когда текущее значение millis() ещё меньше интервала - будет "нестандартная задержка" первого исполнения. В случае когда milli() уже больше интервала - первое исполнение произойдет сразу по входу в макрос. Так и было задумано. Первый случай легко лечится добавлением паузы в инициализирующий код .. у меня такая часто используется в т.ч. и для диагностики ситуации "внезапной перезгрузки скетча", например при провалах питания.
В целом, написано так исключительно для того, чтобы первый раз отрабатывало сразу по вызову, потому и названо everyMillis() - "сразу, и каждый интервал".. :) Исправить "на" неполучится, ибо это даст несколько иной эффект: при входе в блок будет присваиваться КАЖДЫЙ раз текущее значение millis() в t и последующая проверка условия становится гарантировано-невыполнимой. Оттого, что переменная статическая никак не изменяет необходимости присваивания её результата функции тут.
Далее, Какой там у вас разрыв шаблона? В условии if() проверяется превышение текущим временем заданного интервалу .. условие можно сказать "стандартно", в чем пгоблема, что за "разрыв"? и, только если интервал прошел - входим в блок и выполняем нужную последовательность команд .. и только ПОСЛЕ этого сохраняем новое значение. Это обеспечивает, что время исполнения блока команд НЕ входит в длительность пропускаемого интервала. Если надо иначе - можно поменять порядок: сначала сохраняем новое время, а потом исполняем заданные команды. Но, не факт, что время исполнения команд не превысит интервал паузы промеж них.. :)
Скобки там все стоят "по делу". Одни обрамляют блок "then", другие параметр command. Да, и для наглядности и легкости чтения тоже ни разу не мешают ..
Да и в применении, код куда как прозрачно и понятно пишется .. уж куда как легче чем "классное программирование велосипеда"
Это все "претензии" по быдлокоду? Вашу "соринку в глазу", разбирать будем? :)
Это все "претензии" по быдлокоду? Вашу "соринку в глазу", разбирать будем? :)
моих претензий достаточно, что бы я сделал вывод, <sensored>.
простыни объяснений, <sensored>, позволяют мне сделать вывод, <sensored>.
*со своими соринками разберусь как-то сам <sensored>.
хочется тебе писать макросы на эту тему - тебе никто не запрещает: создавай тему и пиши. <sensored>.
Arhar109-2: обсуждаем код, а не авторов. Буду и дальше резать по-живому. :)
А где тут генерится "быдлокод", покажешь? :)
Да, t=0UL; приведет к этому. В случае когда текущее значение millis() ещё меньше интервала - будет "нестандартная задержка" первого исполнения. В случае когда milli() уже больше интервала - первое исполнение произойдет сразу по входу в макрос. Так и было задумано. Первый случай легко лечится добавлением паузы в инициализирующий код .. у меня такая часто используется в т.ч. и для диагностики ситуации "внезапной перезгрузки скетча", например при провалах питания.
В целом, написано так исключительно для того, чтобы первый раз отрабатывало сразу по вызову, потому и названо everyMillis() - "сразу, и каждый интервал".. :) Исправить "на" неполучится, ибо это даст несколько иной эффект: при входе в блок будет присваиваться КАЖДЫЙ раз текущее значение millis() в t и последующая проверка условия становится гарантировано-невыполнимой. Оттого, что переменная статическая никак не изменяет необходимости присваивания её результата функции тут.
Далее, Какой там у вас разрыв шаблона? В условии if() проверяется превышение текущим временем заданного интервалу .. условие можно сказать "стандартно", в чем пгоблема, что за "разрыв"? и, только если интервал прошел - входим в блок и выполняем нужную последовательность команд .. и только ПОСЛЕ этого сохраняем новое значение. Это обеспечивает, что время исполнения блока команд НЕ входит в длительность пропускаемого интервала. Если надо иначе - можно поменять порядок: сначала сохраняем новое время, а потом исполняем заданные команды. Но, не факт, что время исполнения команд не превысит интервал паузы промеж них.. :)
Скобки там все стоят "по делу". Одни обрамляют блок "then", другие параметр command. Да, и для наглядности и легкости чтения тоже ни разу не мешают ..
Да и в применении, код куда как прозрачно и понятно пишется .. уж куда как легче чем "классное программирование велосипеда"
Это все "претензии" по быдлокоду? Вашу "соринку в глазу", разбирать будем? :)
Это все "претензии" по быдлокоду? Вашу "соринку в глазу", разбирать будем? :)
моих претензий достаточно, что бы я сделал вывод, <sensored>.
простыни объяснений, <sensored>, позволяют мне сделать вывод, <sensored>.
*со своими соринками разберусь как-то сам <sensored>.
хочется тебе писать макросы на эту тему - тебе никто не запрещает: создавай тему и пиши. <sensored>.
Arhar109-2: обсуждаем код, а не авторов. Буду и дальше резать по-живому. :)
:) Зачел.
Как объединить класс и цикл for для плавного увеличения/уменьшения переменной? (для плавного нарастания яркости)
Как объединить класс и цикл for для плавного увеличения/уменьшения переменной? (для плавного нарастания яркости)
так же, как и всё остальное.
Понимаю, что не правильно, но можно пример? Надо к утру код дописать, поэтому нах не посылать :)
Понимаю, что не правильно, но можно пример? Надо к утру код дописать, поэтому нах не посылать :)
пример: не использовать фор для плавного включения чего-либо.
Интересно. Мой вариант таков. Плавный разгон работает, плавный стоп-нет
01
if
(val < spd && timer3.tick && state==1 && pp==0){
//Запуск программы 2, плавный старт мотора
02
val++;
03
analogWrite(MOTOR, val);
04
}
05
06
else
if
(loops >=turns && prog==1 && val > 0){
07
if
(timer4.tick && val > stopspd){
08
val--;
09
analogWrite(MOTOR, val);
10
}
Сбросить надо не в 0, а до stopspd
Интересно. Мой вариант таков. Плавный разгон работает, плавный стоп-нет
слушай, мне плевать на все твои варианты плавных включений чего-либо.
класс генерит переменные событий и состояний - далее юзаешь так же, как и всё остальное в языке дуино или С++
*хватит флудить своими бредовыми проблемами
Вообще тема о классе про делей и это к нему относится
Вообще тема о классе про делей и это к нему относится
иди впень - мне лучше знать, для чего эта тема.
Не понимаю, почему так сложно помочь
Не понимаю, почему так сложно помочь
почему тебе сложно дать мне 1000$?
Смотри раздел ищу исполнителя. Какую то реальную сумму за помощь я могу дать
Смотри раздел ищу исполнителя. Какую то реальную сумму за помощь я могу дать
я не нуждаюсь в средствах и бесплатно не работаю - только ради удовольсвия.
помощь тебе мне удовольствия не доставляет - ты туп.