Страница 1 из 1

Запустить код по сигналу

Добавлено: 05 фев 2020, 01:51
Drakon88
Доброго времени всем участникам!
Такой немного странный вопрос. Возникла необходимость быстро проверить идею по механики движений и потребовалось управлять несколькими сервомашинками с ардуины (8шт).
Машинки выполняют последовательно 28 движений (кадров) за один цикл (представим что это робот и цикл - например один шаг паука, и при этом в одном кадре может быть несколько движений одновременно).
Долго пытался сделать это в ФЛ прог, пока ещё не получилось. Нашел автоматизированное решение для этой как казалось бы сложной задачи - есть одна программулина, которой просто указываешь положения сервомашинок и кадры. Далее она просто всё это генерирует в массив точек и готовый код для ардуины. Дело 5 минут. Но огромная проблема в том, что программу писал любитель-программист и там только нужные ему функции, а то чего нужно мне сейчас - нет. В частности при генерации кода есть галочка - повтор циклично. Если её поставить, то при подаче питания ардуина просто будет выполнять кадры с 0-го по 27-ой и всё. Если галочку не ставить, то выполнит один цикл - 28 кадров и всё.
А мне нужно чтобы цикл запускался например при срабатывании датчика или ещё от чего. Упростим задачу до предела - просто при появлении сигнала высокого уровня на какой-нибудь ножке. Но кроме выводов D2-D13, так как на них повешаны сервомашинки и они используются программой.
Более мене изучаю ардуино и т.д. и могу сделать такое для многих примеров как вручную (прописать условия сравнения FOR больше меньше, равно и т.д.) или же сделать это в ФЛ прог. Но с этим кодом ничего не получается!(
То что я вижу необычным - то что весь массив точек находится до блока "VOID LOOP" !
Более того - он находится даже перед "VOID SETUP" !!! Это как вообще ? (при этом оно отлично работает)
Вообще не могу понять как работает данный код.. Может кто объяснит в чём тут загвоздка?

Прилагаю два примера кода - робот27-1 - это однократный цикл, робот27-888 - это бесконечный повтор циклов.
Они фактически одинаковые, разницы почти не нашел, но то что нашел, особо не помогло (в одном месте true, в другом false).
Название проги, которая генерит массив в третьей строчке кода , прописывается автоматически...
Desktop.rar

Запустить код по сигналу

Добавлено: 05 фев 2020, 03:14
dsfbuy
[ref]Drakon88[/ref], Попробуйте. Весь код загнал в блок. Ничем от исходного не отличается.

Запустить код по сигналу

Добавлено: 05 фев 2020, 05:40
Drakon88
[ref]dsfbuy[/ref], Спасибо огромное! Утром попробую. Интересно как оно выглядит, я тоже пытался объединить всё это в FL Prog, но видимо что-то пошло не так. Интересно сравнить со своими попытками:)

Отправлено спустя 39 минут 28 секунд:
Блин, я не могу файл открыть, FL Prog его не видит.. :smile37: Хотя указываю правильную папку. Какая у Вас версия? У меня 6.2.1. и она при открытии требует файл формата *.FLP. Пробовал через блоки пользователей - в правую колонку добавляет, но в итоге я с этим блоком ничего сделать не могу, при перетаскивании в рабочее поле он просто не перетаскивается - вернее перетаскивается, но потом убегает обратно и выдает ошибку. Может у нас разные версии и из-за этого такой глюк?

Запустить код по сигналу

Добавлено: 05 фев 2020, 06:37
edyapd
[ref]Drakon88[/ref], пробуйте. Я не проверял, так как у меня нет нужной библиотеки.
Пока есть "1" на входе REPEAT должен двигаться.
Robot27.flp

Запустить код по сигналу

Добавлено: 05 фев 2020, 07:58
Drakon88
Теперь нормально открылся, прописал цифровой вход на 1 ногу, подтянул эту ногу к +5вольт, добавил инвертирование - чтобы при нажатии кнопки на 1 ноге был низкий уровень, проходя сквозь инвертор он становился высоким и приходил на EN. Проверка вроде ошибок не выдала, всё скомпилировалось. Но в ардуину не загружает (хотя настройки верные - атмега328 + старый бутлоадер), другие проекты проверил - загружаются нормально... Что-то ему мешает.. Кстати, необычный момент - если я загружаю чистый код - то он выполняется один раз при подаче питания с нормальной скоростью.
А когда после компиляции жму загрузить в ардуину - на экране появляются попытки 1, 2, 3, 4 и т.д. до 10 раз. Прикрепил скрин, и вот когда они начинаются, то сервы начинают сумасшедше быстро двигаться с утроенной или учетверенной скоростью наверно и выполняют не один цикл, а наверно штук 20. Подумал что это возможно побочный эффект при загрузке, но в конце вышла ошибка и сервы затихли... Эти 10 попыток длились примерно минуту (возможно чуть меньше - секунд 50)
50.jpg

Запустить код по сигналу

Добавлено: 05 фев 2020, 08:41
edyapd
Если честно, то перечитал несколько раз, но так и не понял.
Если вы не смогли загрузить проект FLProg, то он и не может выполняться. А значит дёрганье серв по какой-то другой причине происходит.
Попробуйте всё отключить, залить проект, выключить, всё подцепить, а потом подать питание.

Запустить код по сигналу

Добавлено: 05 фев 2020, 09:28
aidar_i
У Вас проблема не в программе, хотя и стоит плата Нодемсу у edyapd , надеюсь исправили МК.
Загружается в МЕГУ, что было под рукой, без проблем. Что то с ардуино или неправильно выбираете плату. Попробуйте загрузить ардуино без подключения серво и тп.

Запустить код по сигналу

Добавлено: 07 фев 2020, 00:46
Drakon88
[ref]edyapd[/ref], в ардуине был же старый скетч, вот видимо он пытался запуститься.
А с заливкой были глюки от того что вывод D1 был заведен на кнопку, забыл что он же завязан на UART :smile44: Перенес кнопку на аналоговый вход. Всё загрузилось нормально. Но к сожалению не реагирует на кнопку. Цикл выполняется также как и было - при включении, только ускорен в несколько раз почему-то. Думаю дальше..
[ref]aidar_i[/ref], МК конечно исправил в настройках проекта.

Отправлено спустя 25 минут 33 секунды:
В итоге теперь имею два скетча, которые нужно как то объединить.
Первый это который для одного цикла (второй файл из начального поста для бесконечного повтора циклов нафиг не нужен получается).
И второй сделал часть для обработки кнопки -
На ножку А0 повесил светодиод для индикации (чтобы можно было визуально наблюдать за состоянием)
Логика работы такая - нажали кратковременно на кнопку (А2) - переключился как бы триггер-таймер, который ставит переменную shag в состояние 1 на заданное время - 5 секунд.
При этом любые нажатия на кнопку будут игнорироваться. Это для того чтобы цикл выполнился полностью без сбоев (вдруг случайно нажать кнопку до момента завершения цикла).
кнопка01.flp

Запустить код по сигналу

Добавлено: 07 фев 2020, 07:29
edyapd
[ref]Drakon88[/ref], попробуйте это

Запустить код по сигналу

Добавлено: 07 фев 2020, 09:09
rw6cm
[ref]Drakon88[/ref],
Подредактировал свой первый вариант
Robot27v2.flp

Запустить код по сигналу

Добавлено: 08 фев 2020, 15:33
Drakon88
[ref]edyapd[/ref], сейчас ошибок никаких не было, скомпилировалось, загрузилось нормально, но почему-то машинки вообще не шевятся, от кнопки тоже((. [ref=#ff8000]rw6cm[/ref], сейчас скачаю, попробую, спасибо за попытки! :smile427:

Отправлено спустя 24 минуты 5 секунд:
[ref=#ff8000]rw6cm[/ref], работает! переписал выводы под имеющиеся и пошло всё, огромное спасибо! :smile9: Посмотрел, вы его совсем переделали, но вроде разобрался как менять значения :smile152: