цикл loop()
- Войдите на сайт для отправки комментариев
Пт, 07/03/2014 - 23:35
Хай комрадс.
Только начинаю программировать Arduino, возник вопрос - нужно по нажатию на кнопку, 1 раз выполнить
void loop (); и потом ничего не делать, до повторного нажатия на кнопку и т.д.
(Что-то вроде sleep, потом нажатие кнопки, выполнения void loop(), потом опять сон)
Смотрите с другой стороны. В loop проверить нажатие кнопки и выполнила что нужно, если она нажата
написал такую прогу - не пахает(((
если точнее, задача такая : есть несколько приводов, необходимо ими управлять, отталкиваясь от состояния концевых выключателей(в моем случае герконов).
то есть,
кнопку нажали -> запустился void loop();
первый движок поехал, доехал до геркона -> остановился поехал следующий и т.д.
А зачем вообще заморачиваться с лупом, когда проще мониторить состояния концевиков и потом гонять моторы.
делал через внешние прерывания,
но у меня плата mega 2560, а на ней можно реализовать только лишь 6 прерываний.
посоветуйте, пожалуйста, как быть, если у меня 5 движков на каждом по 3 геркона, итого 15 сигналов, а прерываний только 6?
но у меня плата mega 2560, а на ней можно реализовать только лишь 6 прерываний.
посоветуйте, пожалуйста, как быть, если у меня 5 движков на каждом по 3 геркона, итого 15 сигналов, а прерываний только 6?
завести их все на одно прерывание и на 15 входов , а внутри прерывания проверять какой из входов активен
Что будет если сработают несколько концевиков ? Да и в принципе- прерывания инструмент для тех кто понимает что это такое и как это использовать. Вам прерывания для решения задачи - как зайцу седло. Кстати интересно у вас этот самый моушен внутри прерывания то работает, вы пробывали :-) ? Опрашивайте последовательно кнопки в цикле и по результатам действуйте. А прерывания оставьте для самоуничтожения конструкции.
прерывание ему не помешает, но пусть будет одно на всех (еще можно комбинировать с PCINT)
схема с "ИЛИ" ему в самый раз, в одном прерывании успеет расставить все флаги по сработавшим герконам и дальше в программе (внепрерывания) их обрабатывать и сбрасывать.
спасибо за помощь
предложенное решение годно, но для моего случая не пройдет(( т.к. у меня алгоритм начинается с того, что 5 герконов замкнуты (то есть двигатели находятся в исходном положении):
// геркона 3, для контроля средней точки между концевиками
первый двигатель -----замккнут--------разомкнут----------разомкнут---------
.
.
пятый двигатель -----замккнут--------разомкнут----------разомкнут---------
-------------------------------------------------------------------------------------------------
и еще такой вопрос почему не работает следующий код
1. система с герконами не быстрая и в любом случае успеете опросить несколько десятков контактов (герконов); вам верно советовали - прерывание применить можно, но не обязательно
2. сложно сказать почему не работает код не зная чего вы хотели добиться от него
Смешно однако :-) Что прерывание все же помешало ? :-) Кстати в случае объединения прерываний по изменению уровня сигнала, а здесь именно такая ситуация, придется использовать исключающее или. А если обойтись без прерываний то можно реализовать матрицу опроса. Для 16 герконов понадобится всего 4 выходных ноги, по которым бежит 0 и 4 входных, которые опрашиваем. И вообще, при использовании прерываний нужно понимать, что внутри прерывания практически любое обращение к большинству подпрограмм приведет к непредсказуемым результатам, поэтому ардуино програмисты используют семафоры. Но при ближайшем рассмотрении это странно поскольку обработка семафора происходит вне прерывания. Что мешает проверять фактор вызывающий прерывание в цикле вне прерывания ? Ничего ! Да же действий меньше. Вот поэтому я и говорил о понимании сути прерываний... жаль что меня с прерываниями не поняли :-)
Смешно однако :-) Что прерывание все же помешало ? :-) Кстати в случае объединения прерываний по изменению уровня сигнала, а здесь именно такая ситуация, придется использовать исключающее или. А если обойтись без прерываний то можно реализовать матрицу опроса. Для 16 герконов понадобится всего 4 выходных ноги, по которым бежит 0 и 4 входных, которые опрашиваем. И вообще, при использовании прерываний нужно понимать, что внутри прерывания практически любое обращение к большинству подпрограмм приведет к непредсказуемым результатам, поэтому ардуино програмисты используют семафоры. Но при ближайшем рассмотрении это странно поскольку обработка семафора происходит вне прерывания. Что мешает проверять фактор вызывающий прерывание в цикле вне прерывания ? Ничего ! Да же действий меньше. Вот поэтому я и говорил о понимании сути прерываний... жаль что меня с прерываниями не поняли :-)
Схема XOR (исключающее или) для 15 входов будет показывать четность или нечетность количества единиц на входе XOR. Зачем козе баян?
Матрица хорошо, но так как комбинации замкнутых герконов могут быть любыми, нужны 15 шт диодов
Xor - что бы отлавливать изменения при сработке геркона . Если коза не понимает зачем баян, то он ей , однозначно, не нужен. Ну да, при таком раскладе нужны диоды, а еще какие нибудь проводочки, припой с канифолем, паяльник, руки , глаза и желание ... а еще мозги нужны ! Кароче много чего нужно... Может список составим ?