void loop ()
- Войдите на сайт для отправки комментариев
Сб, 16/11/2013 - 22:07
Возможно ли в программном коде ардуино напистаь несколько void loop(1) .... void loop(2)...
Просто в проекте используется задержка в 15 секунд...
и получается так, что система не следит за другими параметрами в течении 15 секундной задержки....
Нет .
Смотря для каких целей,но в некоторых случаях используются прерывания или millis().
есть :
-4-е кнопки
-2 потенциометра
- светодиод
у меня задача, чтобы при одновременно зажатых 4х кнопках начинался отчет времени 15 секунд, если за это время значение на двух потенциометрах не станут равными +/- 10% то зажечь светодио, а если значения в данный интервал (15 сек) уровнялись, то нечего не делать.
В переменную заносишь значения millis() при нажатии кнопок (условие на все входах по HIGH)и можешь в какуюнить переменную заносить флаг что идёт выполнение замера, далее в loop делаешь if ((millis()-значение переменной в которую ты внёс)>=15000)&&твой флаг выполнения){выполняешь боевой замер и сбрасываешь флаг, опционально обнуляешь счётчик}. и опционально делаешь ветку else в которой можешь выполнять замер и в случае успеха сбрасывать флаг.
Вообщем вот мой код для ардуино пока на двух кнопках и двух потенциометрах, помогите избавиться от функции делай, с миллс что то так и не смог разобраться...
Rash923, четыре кнопки можно соединить последовательно и читать значение одним пином.
http://arduino.ru/tutorials/BlinkWithoutDelay адаптируйте к своему коду, тут не так уж сложно
Заметил следующий недостаток.
Я так понял миллис ведет постоянный отсчет, т.е. постоянно считает от 0 до 15 секунд в моем случае, и если к концу отсчета 15 секун все условия совпали, то светодиод включается. Нельзя сдеать так чтобы миллис начинал отсчет, только после того как совпадут все условия?
Просто на данный момент получается следующее: нажал я на четыре кнопки, вывел потенциометры в разность, по истечении 15 секун светодиод загорается, но при повторении данного алгоритма задержка становится меньше, бывает что если удачно попасть, то и сразу отрабатывает... Как с этим бороться?
http://www.arduino.ru/forum/programmirovanie/time-millis
пробовал как здесь тоже не получается
Может кто знает как обнулять Millis?
вообщем вот с таким кодом работает все гуд!!
Суть в том что в конце цикла мы присваиваем Time значении millis на момент окончания цикла, таким образом в следующем цикле можно выставить условие отработки если разница текущего значения millis и millis из предидущего цикла равно 15сек, то выполнить действие. т.е. 145 строчкой этого кода мы даем себе точку опоры. ;)
Может кто знает как обнулять Millis?
Присваивай значение millis своей переменной по мере необходимости. Ну и обнуляй переменную когда сочтёш нужным.
Заметил, что если использовать один и тотже алгоритм с миллис, но для разных if то миллис начинает тупить.... Интервалы приходится уменьшать...
конечный код, может кому будет интересно, все работает круто;)
вот что значит ардуину использовать. памяти куча. и можно использовать вместо функций для одинаковых кусков вставлять один и тот же код много много раз
Да уж, Тойота со своими 11000 переменных отдыхает :)
http://arduino.ru/Reference/FunctionDeclaration
может так понятнее станет о чем говорим. автор код можно сделать меньше и более читаемым
да и комментарии на транслите это зачем?
вот еще почитайте.
http://arduino.ru/Reference/Array
у вас много переменных. если так много дейсвительно надо используйте массив
Спасибо ребят!) обязательно прочту;) просто соояла задача очень быстро сделать и чтоб работало.... А я во всем этом деле новичек)) потом обязательно переделаю;)
>> Возможно ли в программном коде ардуино напистаь несколько void loop(1) .... void loop(2)...
А почему нельзя? Вполне можно. Берем файлик arduino/cores/arduino/main.cpp и делаем себе возможность исполнения произвольного кода в прозвольном порядке. Хотя проще обойтись обычным распараллеливанием внутри void loop(void)
А почему нельзя? Вполне можно. Берем файлик arduino/cores/arduino/main.cpp и делаем себе возможность исполнения произвольного кода в прозвольном порядке. Хотя проще обойтись обычным распараллеливанием внутри void loop(void)
Ну если быть предельно точным, то паралельную обработку на одном ядре сделать априори не получиться. Относительно несложно можно сделать подобие кооперативной многозадачности.
Даже подобие вашим способом сделать не получится.
успешная реализация многопоточности
http://robocraft.ru/blog/985.html
Нет .
НЕ ОБОБЩАЙТЕ!
Читайте внимательней и прекратите уже ковыряться в старье :) Следите так сказать за новыми трендами..
http://arduino.cc/en/Tutorial/MultipleBlinks
сомневаюсь,что у создавшего тему Arduino Due ...В большинстве случаев эта Arduino Due - что пушкой по воробъям )
"старье" дешевле и его хватает на большинство задач.. Иногда хватает даже attiny13 и не ставить же вместо её Arduino Due..
сомневаюсь,что у создавшего тему Arduino Due ...В большинстве случаев эта Arduino Due - что пушкой по воробъям )
"старье" дешевле и его хватает на большинство задач.. Иногда хватает даже attiny13 и не ставить же вместо её Arduino Due..
я бы вообще никуда АРДУИНО не ставил! ибо взять просто камень атмеловский и уже достаточно :)
SAM3X стоит 5 баксов.
Ну если быть предельно точным, то паралельную обработку на одном ядре сделать априори не получиться. Относительно несложно можно сделать подобие кооперативной многозадачности.
зачем изобретать велосипед, если есть готовое решение типа FreeRTOS и подобных. На старшие атмелы поставить можно. Там и таймеры свои есть и дофига всего. Но мастырить ОСРВ для 4 кнопок и потенциометра смешно :)
Rash923, алгоритм задержек надо сквозным делать, чтобы не сидеть в циклах ожидания, как вам выше подсказали
Да я уже разобрался тут во всем;) используя функцию миллис)) просто сижу состороны наблюдаю за боталиями.... Может чего умного напишут;)
Возможно ли в программном коде ардуино напистаь несколько void loop(1) .... void loop(2)...
Я делаю несколько параллельных циклов так
Они не выполняются параллельно.
не хотел новую тему открывать, сегодня напишу здесь. видел несколько проектов с несколькими loop ? обьясните по русски как она работает?
не хотел новую тему открывать, сегодня напишу здесь. видел несколько проектов с несколькими loop ? обьясните по русски как она работает?
я видел баб с тремя сиськами - как это по-русски работает?
тебе лишь бы постебаться, не хочешь говорить, молчи
тебе лишь бы постебаться, не хочешь говорить, молчи
покажи, где ты видел больше одного лупа?
ну так тут один loop(), остальное просто функции с похожим названием.
типо - открыл одну сиську, а там три сиськи.
В чистом AVR такого вопроса даже существовать не может. Решается прерываниями. В Ардуине таки реально сделать несколько псевдоЛУПОВ, но это костыли.
В чистом AVR такого вопроса даже существовать не может. Решается прерываниями. В Ардуине таки реально сделать несколько псевдоЛУПОВ, но это костыли.
ты случайно не внук Онкеля?
нет.
кто такой Онкель? И чем он прославился?
кто такой Онкель? И чем он прославился?
костылями и фонтанами
я так понимаю каждый лоор независим от другого. если я в один цикл залью один скетч, а в другой второй, то они будут работать независимо друг от друга?
ну так тут один loop(), остальное просто функции с похожим названием.
Котищще! Ты мне моск не размножай!
Ходит как утка, крякает, как утка и выглядит, как утка - значит утка и есть! ;)
нет. это нереально. разве что светодидами моргать.
типо - открыл одну сиську, а там три сиськи.
- Три сиськи? - Зачёт! (с)
вот наконец то пример нашел- ты угадал, про диоды. осталось научиться разбирать библиотеку
я так понимаю каждый лоор независим от другого. если я в один цикл залью один скетч, а в другой второй, то они будут работать независимо друг от друга?
точно - в одной сиське молоко, в другой пиво, в третьей водка.
нет. это нереально. разве что светодидами моргать.
Бобёр! Выдыхай уже! Посмотри в Википедии понятие "шутка".
А то я из-пацтола печатать уже не могу!
ладно, пусть будут сиськи. если вдруг появиться delay в одной сиське, то остальные сиськи будут ждать, или работать дальше
лаврова на вас не хватает.