два таймера из одного millis
- Войдите на сайт для отправки комментариев
Втр, 20/03/2018 - 13:54
Добрый день. Прошу помощи как новичку.
Можно ли из стандартного таймера на millis получить два, на один и тот же выход, но на разное время например 1000 и 60000 мсек.
Заранее благодарен за любую помощь.
const int sveha = 11; int State = LOW; int State1 = HIGH; unsigned long previousMillis = 0; const long interval = 1000; const long interval_2 = 60000; void setup() { Serial.begin(9600); pinMode(sveha, OUTPUT); } void loop() { unsigned long currentMillis = millis ( ); if ( currentMillis - previousMillis >= interval ) { previousMillis = currentMillis; if ( State == LOW ) { State = HIGH; } else { State = LOW; digitalWrite ( sveha, State ); } } }
Не знаю, что Вы подразумеваете под "стандартным таймером", но, вероятно, Вам нужно ввести несколько разных previousMillis.
А лучше, конечно, сделать это с применением классов (ООП).
Классы (ООП) это?
Это - что?
Или Вы рисунок забыли вставить?
стандартным я называю "примеры" на сайте адуино - https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
ЧТо такое классы (ООП) ?
Срочно читайте лекции по ООП, да как можно понятнее!!!! Иначе зачем этот ваш форум нужен!!! Бездельники!
ЧТо такое классы (ООП) ?
ООП - это аббревиатура.
Как-то не спортивно. Честнее использовать два millis'а.
unsigned
long
currentMillis = millis( ); перввый будет блокировать второй.
unsigned
long
currentMillis = millis( ); перввый будет блокировать второй.
Где тут первый, а где второй?
Я вижу, что код ещё не тестировали в ардуино.
тестировал "пример " работает, моя химия естественно нет
один интервал работает, два разных интервала не работают.
Если хотите, чтобы кто-то читал Ваш код - Вставка программного кода в тему/комментарий
Как именно не работают?
один интервал работает, два разных интервала не работают.
В строках 12 и 13 действительно должны былть LOW в обеих? Меня терзают смытные сомнения, что нет.
что бы я там (строки 12-13)не ставил все равно не работает.
Поэтому и прошу помощи.
Так помощи не просят. Вы опубликовали ХЗ что вместо кода (это даже компилироваться не будет) что утверждаете что вставляли туда "что бы".
Давайте конкретный код в котором есть проблема.
что бы я там (строки 12-13)не ставил все равно не работает.
Поэтому и прошу помощи.
Вот попробовал, не работает.
В 22 строке всё хорошо?
Да, можно поставить "HIGH" ничего не изменится.
Я него про это ещё вчера спрашивал (#17), тут ещё к тому же и одна переменная состояния на два светодиода.
Да, можно поставить "HIGH" ничего не изменится.
Вы что, методом тыка что-то ставите или не ставите? Правильно-то как. Вот так и поставьте, а если не меняется, ищите следующую ошибку.
А не работает, что именно?
Светодиод горит постоянно!
Я него про это ещё вчера спрашивал (#17), тут ещё к тому же и одна переменная состояния на два светодиода.
Зато человек чётко описал, что и как должно работать и после каждой попытки очень подробно расписывает, что же не так сработало. А то некоторые просто пишут: 1. хочу два таймера; 2-N не работает, не работает, не работает.
Светодиод горит постоянно!
Вам же уже два дня объясняют. И я и коллега вот присоединился. Вы вообще читаете, что Вам пишут?
Ну, давайте смотреть:
Вот истёк первый интервал времени и сработало условие в строке 12. Что при это происходит? State становится HIGH и зажигается светодиод.
Что дальше? А ничего, все Ваши проверки идут на state == LOW (строки 14 и 22). А поскольку state уже стала HIGH - ни одна из этих проверо никогда не сработает и state навсегда останется HIGH.
Понимаете? Или не так объяснил?
Потому я и толкусь здесь. Другого давно послал бы.
А вот тут нет. И Вы и я говорим про одно и тоже и получаем ответы -"да, ставил я по-разному". Это не то, чтобы "подробно" :)
itar, в общем случае, Ваша задача безусловно имеет право на жизнь. Но вот Ваш конкретный пример выглядит несколько странно. Вы понимаете, что если Вам по двум таймерам нужно делать одно и то же, и один интервал кратен другому, то один таймер можно просто выкинуть? Конечно если у Вас будут произвольные, не кратные интервалы, то всё нормально.
Автор, раскройте тайну, что должна делать ваша программа?
Светодиод горит постоянно!
Повезло!
Вы что, методом тыка что-то ставите или не ставите?
... работая в Силиконовой Долине, Резник занимался так называемым RCP – «random code programming» ...
RCP – это близкое по идеологии, но совершенно иное по целям и результатам направление в программировании. Здесь мы генерируем не случайные комбинации входных данных, а случайные последовательности самого программного кода. А потом прикладываем к этому коду принципы «exhaustive testing».
Это как с обезьяной, способной за миллион лет настучать на машинке «Войну и мир» – только в случае с RCP мы отводим миллиард лет, делаем обезьяне серьезный оверклок воткнутым в задницу высоковольтным проводом – и ожидаем, что она напишет нам не «Войну и мир», а программу, способную написать «Войну и мир».
Качество задачи меняется – поэтому нужна очень высокая производительность и большие объемы памяти. Сегодня с этим проблем нет: мощности избыточны. Достаточно задать требования к выходным секвенциям, и мы рано или поздно получим программу, которая будет делать то, что нам угодно.
© Виктор Пелевин "iPhuck 10"
:-D
светодиод должен гореть 1 сек, 10 сек молчать
Ну так поменяйте местами значения интервалов или LOW/HIGH.
не поможет
Вот в таком виде горит 10сек 1 сек молчит.
Кайф!
RCP говорит: сменить LOW на HiGH, и наоборот ("часы на трусы").
не поможет
Беда :(
Вот в таком виде горит 10сек 1 сек молчит.
А мне нужно наоборот!
Афтар, нафига ты второй интервал упрятал в else от первого?
Нет больше сил смотреть на твою тупость. На, держи:
Нет больше сил смотреть на твою тупость. На, держи:
Сломался? :))))
Сломался? :))))
Ага :)
Я б у таких ардуино отбирал с поражением в правах на 10 лет. Тут либо просто выгнать его с форума, либо дать ему код и он сам уйдет. Пытаться наставить его на путь бесполезно, мой пылесос и то больше в программировании смыслит...
Сломался? :))))
И в этом +, ТС так и будет жить с убеждением, что для решения этой задачи нужно два интервала.
Так, упс, извиняйте парни, ошибка вышла. Вот так будет лучше:
И в этом +, ТС так и будет жить с убеждением, что для решения этой задачи нужно два интервала.
В общем случае, кмк, тут нужно два интервала. А вот Превиус_миллис зватит и одного.
спасибо конечно!но только ни в первом, ни во втором случае, все равно "не работает!"
спасибо конечно!но только ни в первом, ни во втором случае, все равно "не работает!"
выложите скетч целиком
спасибо конечно!но только ни в первом, ни во втором случае, все равно "не работает!"
выложите скетч целиком
Дык, это, вы его еще не написали.