Временные участки в коде

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Здраствуйте, хотелось бы узнать как опытные программисты организуют разные временные задержки в участках кода. Постараюсь описать ситуацию: есть тележка на рельсах. Дистанция от края до края метров 30. На тележке установлены 2 датчика металла. При подъежанию к краю рельс, один из сенсоров касается металла, тележка останавливается, ждет 4 секунды и едет к др краю рельс, и так бесконечно. Также на тележке есть съемник, который  опускается через равные промежутки времени. При этом надо моргать светодиодами и отслеживать контур безопасности и другие мелочи. Вот мне и интересно, как организовываются такие временные интервалы. Так как delay() и прочия подобные трюки тут не сработают, ведь все время нужен контроль за другими частями программы.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Была так же идея ставить переменные в требуемые участки задержки и при каждом проходе главного цикла их инкрементировать, а при совпадении с указаным значением что то выполнять. Но в тут свои грабли - точность времени ну совсем никакая, все будет зависить от длины кода программы.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Идеологически верно использовать функцию millis()

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

OlegK пишет:

Идеологически верно использовать функцию millis()


Ну впринципе то да, но millis не бесконечен

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Почитайте.

ЗЫ. А ещё,  вверху страницы есть поисковое поле, где по слову millis можно дохрена чего почитать.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

OlegK пишет:

Почитайте.

ЗЫ. А ещё,  вверху страницы есть поисковое поле, где по слову millis можно дохрена чего почитать.


Благодарю за информацию

bwn
Offline
Зарегистрирован: 25.08.2014

semaawp пишет:
Ну впринципе то да, но millis не бесконечен

Еще одна фраза и последуете за Джордано Бруно. Здесь жестоко расправляются с еретиками из секты "Конечного Миллиса".))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

semaawp пишет:
Ну впринципе то да, но millis не бесконечен

А что в этом мире бесконечно? Вроде Эйнштейну приписывают фразу: «Только две вещи бесконечны - Вселенная и человеческая глупость, хотя насчёт Вселенной я не уверен».

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

semaawp пишет:
Здраствуйте, хотелось бы узнать как опытные программисты организуют разные временные задержки в участках кода.
Вообще-то опытные програмисты стараются не делать такую херню, или если и делают , то очень короткую.
Цитата:
Постараюсь описать ситуацию: есть тележка на рельсах. Дистанция от края до края метров 30. На тележке установлены 2 датчика металла. При подъежанию к краю рельс, один из сенсоров касается металла, тележка останавливается, ждет 4 секунды и едет к др краю рельс, и так бесконечно. Также на тележке есть съемник, который  опускается через равные промежутки времени. При этом надо моргать светодиодами и отслеживать контур безопасности и другие мелочи. Вот мне и интересно, как организовываются такие временные интервалы. Так как delay() и прочия подобные трюки тут не сработают, ведь все время нужен контроль за другими частями программы.

Не надо путать код и то что код делает. Это совершенно разные понятия.  Вот к примеру программист пишет программы, но кроме этого он ест, срет и спит. И вот что удивительно, что без трех последних действий он долго писать программы не сможет.Хотя многим и хотелось бы.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

qwone] </p> <p>[quote=semaawp пишет:
Не надо путать код и то что код делает. Это совершенно разные понятия.  Вот к примеру программист пишет программы, но кроме этого он ест, срет и спит. И вот что удивительно, что без трех последних действий он долго писать программы не сможет.Хотя многим и хотелось бы.


Ну зачем сразу так близко к сердцу принимать? Ну ошибся я в доводах насчет millis(). Не все же рождаются программистами. Да и про код я думаю саму суть уловили, а переворачиваете все с ног на голову. Просто в программе есть критичные ко времени участки кода (контур безопасности к примеру) и неочень (моргание светодиодов, опрос кнопок), поэтому и попросил советов. Надеюсь к вашим детям с чужой стороны такого отношения небудет.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

semaawp. Я же тоже не программист, да и сейчас не работаю программистом. Просто когда люди садятся писать программы, они буквально не хотят проектировать программы перед тем как писать код. Заведите переменную state - 0 стоят в одном конце 1 ехать в другой конец,3 стоять в другом конце и 4 ехать обратно. И потом переключайте эти состояния по времени или по условию. И у вас не будут задержки в коде, а будут задержки в реализации. 

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

qwone пишет:

semaawp. Я же тоже не программист, да и сейчас не работаю программистом. Просто когда люди садятся писать программы, они буквально не хотят проектировать программы перед тем как писать код. Заведите переменную state - 0 стоят в одном конце 1 ехать в другой конец,3 стоять в другом конце и 4 ехать обратно. И потом переключайте эти состояния по времени или по условию. И у вас не будут задержки в коде, а будут задержки в реализации. 


Я вас понял, получается мне лучше все разбить все на подзадачи и выполнять их отдельно. Например пока возмем только тележку. Как вы и сказали у нее есть несколько состояний, то есть 4. Это движение вперед, движение назад, конечное положение тележки и начальное, плюс 5ое состояние - неопределенное. То есть когда только подали питание на контроллер. Соответствеено переходя из одного состоЯние в другое я выполняю поставленную задачу, вы это сказать хотите?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну да. Вы же не остаетесь на работе, когда предприятие закрывается, а идете домой. Что бы утром продолжить работу. Так и процессору незачем висеть в одном и том же месте, ждать пока надо сделать следующий код. 

Вот тут пример как я пишу подобные задачи. http://arduino.ru/forum/programmirovanie/pomogite-novichku-ochen-prostoi-proekt-muchayus-3-dnya#comment-325365

А вот тут про состояния. #38

inspiritus
Offline
Зарегистрирован: 17.12.2012

Подобную задачу я реализовал бы с помощью библотеки timerOne кажется так она называлась. 

Она позволяет организовать псевдомногозадпчность. 

В подпроцессах с заданными промежутками можно менять флаги, а главный цикл исполняет заданное ими. Это несколько перекликается с предложеныом уважаемым  qwone.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

qwone пишет:

Ну да. Вы же не остаетесь на работе, когда предприятие закрывается, а идете домой. Что бы утром продолжить работу. Так и процессору незачем висеть в одном и том же месте, ждать пока надо сделать следующий код. 

Вот тут пример как я пишу подобные задачи. http://arduino.ru/forum/programmirovanie/pomogite-novichku-ochen-prostoi-proekt-muchayus-3-dnya#comment-325365

А вот тут про состояния. #38


Спасибо, это как раз то что мне нужно, общую концепцию я понял, еще раз благодарю :)