Как подружить цикл FOR и функцию millis() ?
- Войдите на сайт для отправки комментариев
Пт, 11/12/2015 - 12:13
Подскажите пожалуйсте есть ли решение (уже прогуглил и многое перепробовал) для того чтобы подружить цикл for и millis. Имею такой кусок кода:
for (int i = 0; i < 255; i++) { analogWrite(motorPin, i); delay (50); }
Хочу сделать так, чтобы каждая интерация цикла проходила через 50 мс, но без delay.
используйте цикл
while(){}
Можно конечно попробовать извратиться и попробовать сделать множественные условия в for(), но не советую.
Вопрос философский, потому что код вырван из общего контекста задачи. Если задержка должна быть только внутри for, то нет смысла убирать delay, если и сам цикл должен на эти 50 ms должен отдавать время остальной задаче, тогда другое, но тогда нужно знать в каком контексте выполняется этот цикл. Если он выполняется в loop, тогда просто (см. BlinkWithoutDelay в примерах IDE), а если внутри функции, тогда нужно смотреть как и когда вызывается эта функция. Немаловажный вопрос здесь, точность выполнения интервалов (тогда правильней повесить на таймер, например, либо, если это не важно, тогда другое дело).
Я вообще осваиваю программирование. Просто сам задалася таким вопросом и решить самостоятельно никак не получается. Конкретно пытался выполнить следующее:
считывание показаний с ультразвукового дальномера, постоянный опрос цифрового пина на появление сигнала с кнопки при одновременном выполнении цикла. Цикл как и считывание показаний с дальномера и опрос цифрового пина выполняются на равных условиях в процедуре void loop() Естественно все должно происходить без задержек.
Вопрос чисто академического характера. У меня никак не получилось использовать millis внутри цикла. Может поможете уважаемый kisoft разобраться?
И здесь и где только нет, гуглите, читайте вникайте .. по ключевикам "Blink без delay()" .. полно.
Совсем без задержки вряд ли получится: в стандартном способе работы с ультразвуковым дальномером используется pulseIn(), которая и будет давать задержку равную удвоеннгму времени прохождения звука до препятствия.
Кроме того, кнопкам обычно присущь дребезг, для его подавления также нужна задержка.
Так что в принципе, куда копать, Вам посоветовали: blink without delay, но возможны многочисленные тонкости.
Дальше можно додумать там, переменную dir приделать, если 0 - убавлять, а если 1 - прибавлять, разные вариации.. А, да, донатить аддену можно на ЯД 410011919696337 или 410011915019172, QIWI +79145891987. 10 юаней будет достаточно :) Ну, раз уж я расчехляю клешни, и вместо того чтобы раковать в доту, пишу всякие кодЫ.
Собсно, моя основная мысль: вытащить увеличение мотора из цикла, пусть оно станет глобальным процессом.
расчехляю клешни, ..... раковать в доту..
ветвь развития тупиковая.
обучая обучаешся.