Управление одним джойстиком двумя шаговиками.
- Войдите на сайт для отправки комментариев
Здравствуйте жители форума.
Пытаюсь создать управление одним джойстиком двумя шаговыми моторами.
Моторы 28BYJ-48 5в с драйверами ULN2003 по две штуки, джойстик самый обычный из набора Ардуино.
Алгоритм вращения моторов на картинке. Стрелки побольше - направление джойстика, парные стрели - моторы, соответственно правый и левый. Знак "-" мотор стоит.
С джойстика считываю: >510 -вперед, <500 -назад, от 500 до 510 "-".
Хочу сделать библиотеку и пихать её потом в разные поделки.
У меня получается восемь блоков проверяющих последовательно каждое направление джойстика. Все построено на функциях If else. При совпадении выдается 32 строки кода (4х8 (четыре обмотки, восемь шагов)) которые задают состояния выводов и соответственное состояние обмоток мотора.
И эта конструкция получается очень громоздкая, и я думаю работать будет очень медленно, а скорее всего работать вообще не будет :)
Товарищи программисты, подскажите пожалуйста более эффективный способ решения.
п.с. Я не очень еще в программировании разбираюсь, мне если не трудно, по подробнее.
п.п.с. Очень прошу над картинкой не ржать.
У меня получается восемь блоков проверяющих последовательно каждое направление джойстика. Все построено на функциях If else. При совпадении выдается 32 строки кода (4х8 (четыре обмотки, восемь шагов)) которые задают состояния выводов и соответственное состояние обмоток мотора.
И эта конструкция получается очень громоздкая,
Нормальная
и я думаю работать будет очень медленно,
Что заставляет Вас так думать? Оно, конечно, "как напишете", но объективных причин для медленности не вижу.
а скорее всего работать вообще не будет :)
Это как напишете.
товарищи программисты пока не увидели правильно вставленного отформатированного кода,
над картинкой не ржал.
товарищи программисты пока не увидели правильно вставленного отформатированного кода,
над картинкой не ржал.
Да кода как такового нет.
Вот такой пока набросок.
if (data [0] <500 ){{
// выполняется блок команд «движение назад»}
if (data [1] <500 ){
//выполняется блок команд «движение назад и в лево» }
else if (data [1]>510 ){
//выполняется блок команд «движение назад и в право» }}
else if (data [0] >510){{
// выполняется блок команд «движение вперед»}
if (data [1] <500 ){
// выполняется блок команд «движение вперед и в лево» }
else if (data [1] >510){
// выполняется блок команд «движение вперед и в право» }}
Блоки команд я с планшета устану писать, дома оформлю в ИДЕ выложу в нормальном варианте.
Будет работать?
в нормальном виде посмотрим
Вот такой пока набросок.
Вам же как человеку написали "правильно вставленного отформатированного кода", А Вы что выложили?
Будет работать?
Не знаю будет ли этот код работать, но читать его здесь никто не будет - это точно.
Вот такой пока набросок.
Вам же как человеку написали "правильно вставленного отформатированного кода", А Вы что выложили?
Будет работать?
Не знаю будет ли этот код работать, но читать его здесь никто не будет - это точно.
На планшете тяжело набирать, дома в IDE сделаю - выложу.
Костя, глянь http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Костя, глянь http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
:) да умею я код вставлять, я на работе пишу на планшете, и очень не удобно на нем писать. Дома на ноуте сделаю и выложу нормально, кнопкой «вставка кода».
Ну вот так.
В IDE выдает ошибки.
правильно выдает, где определение data[]
Секретные?
правильно выдает, где определение data[]
вот оно.
Вопрос не в нем, мне само управление не нравится.
Можно все If else заменить на что-то более "красивое"?
Секретные?
ну да, с определением IDE ошибку не выдает.
можно, читаем про массивы.
А красивое вы не потяните . У вас это ...как его.. знаний маловато. А без знаний в голове ... ничего не выйдет. А на форуме вам курсы повышиния квалификации индивидуально никто устраивать не будет. Геморойно это.
А красивое вы не потяните . У вас это ...как его.. знаний маловато. А без знаний в голове ... ничего не выйдет. А на форуме вам курсы повышиния квалификации индивидуально никто устраивать не будет. Геморойно это.
Вы убили детскую мечту :(((
можно, читаем про массивы.
Что-то я не догоняю, можно чуть подробнее.
С самим массивом понятно, а что в него прятать?
можно и еще оптимизировать, но не хочется вам голову забивать.
Спасибо, пошел читать.
Вот такая программа у меня получилась.
Вы писали что нужно создать еще по три функции для каждого мотора, видимо имелось ввиду ВЛЕВО, ВПРАВО и ВПЕРЕД. НАЗАД вы сделали. Но поворот осуществляется комбинацией ВПЕРЕД, НАЗАД на двух моторах, по этому сделал по одной.
да, согласен, просто не задумывался сильно ...
еще чуток "оптимизации"
вместо
пишем
ну и для левого мотора анологично.
Если оптимизировать, то как минимум так
Чет я тебя не понимаю, ветку про обучению "правильному" программированию открыл, сюда влез, доведи дело ко конца. Человек вменяемый, в теме, может даже на замечания свои замечания, ну не кривой он и не заказчик не разу, и задумки одекватные.
ну сделай правильно, ТЗ тут как на ладоне, он все написал, просил укажите что можно "оптимизировать" подчистить, кривых задумок тоже не вижу.
а твой move, я бы "оптимизировал" в качестве последнего параметра задав четкое направление, вперед,назад,вперед-лево, вперед-право и т.д
xDriver, огромное Вам спасибо за помошь.
Я не то чтобы «в теме», но изучаю по маленьку:)
Я понимаю каждую строку кода и могу объяснить ее назначение (может не по научному, но по лузерски объяснить смогу), а вот целиком, с нуля скетч написать не могу.
У меня к вам еще одна прозьба, посоветуйте что почитать по теме. По структуре программ, по последовательности действий. Только не сильно заумное, написаное доступным языком. Еще раз большое спасибо.
П.С. про адекватность согласен - тут я на высоте :)))
Дайте пожалуйста ссыль на вашу ветку о «Правильном программировании».
И мануал для юзеров/лузеров - было бы очень круто.
Еще пару слов хотелось бы сказать про задумку.
Обусловлена она ...малым количеством рук у человека. У нас есть танк с р/у. Два рычага управляют движением, две кнопки поворотом башни, еще одна делает выстрел, вверх/вниз пушка не регулируется. Управлять такой игрушкой не очень удобно. Еще я видел р/у экскаватор. Там переключатель. В одном положении управляет движением, в другом ковшом. Управлять ковшом в движении нельзя. Т.е. имеем ограниченный функционал. В моем варианте одна рука будет управлять движением, а вторая, в перспективе, будет управлять пушкой, отвалом, ковшом, манипулятором и т.д.
КонстатинБ,тема она вот. Я не скрываю ее. Разумеется ее надо было прикрепить. Но..
http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...
Есть такое выскавзывание:Выиграл войну, но проиграл мир. Пародокс. Ну вроде решил важную для человечество проблему, но человечеству важна пробема, а не ваше решение. Программирование это процесс коллективный.Нет, пишет программу программист сам, но пользуется ей часть общества. А если вашей программой не пользуется никто, то как бы хороша она не была, то и смысла в ней нет.
Вот и у меня. Хотя я и придумал простой метод проектирования программ на Ардуине,который можно легко тестировать, объединять скетчи написаные в этом стиле и даже осуществлять "параллельные задачи". Я оказался плохим "учителем" и плохим "писателем мануалов для новичков". Побеждает то программирование , мануалы которые распростанены и понятны большинству, каков бы уровень их низок.
ПС: Вот каркас по моему стилю. И что? Вам там будет сложно понять что-то. А значить изменить и поставить под вашие текущие задачи. Вот и выходит что мой скетч "бессысленен"
qwone, я бы разделил программирование на профессиональное и на любительское. И методы есть массово применяемые (читай протестированные в разных вариантах, ситуациях, многократно описанные и разжеванные), и есть новые которые надо изучать, в которые надо вникать, вдумываться и если у юзера не математический склад ума, то это становится серьезной проблемой. А еще есть консерватизм и пассивность у людей. Когда человек владеет каким либо методом, ему тяжело внедрять что-то новое. Да, он знает что новый метод более совершенный, более быстрый, более прогрессивный, но... Ну и в конце концов есть обычная лень.
Я себя еще даже к любителям не отношу, прочитал первые посты в вашей теме, сходу не вьехал :), изучаю скетч (каркас вы его назвали).
Да, еще важное замечание.
Шаговики я использую потому, что они есть. Точность шага не критична.
КонстантинБ, я бы тоже не вьехал если я впервые встретился со своим способом . Да и этот способ это результат работы 1 года исследований. И что бы внятно расжевано описать все надо написать книгу толщиной как у Страуструппа(для Кнута пока маловато материала), нарисовать 25 различных подключаемых библиотек. И в этом я ничего нового не предложу.Банально синтез существующих знаний.
Каркас . Ну я просто не хочу вводить слово фраймворк(анл framework ). Это основа к которой можно подключить уже отлаженые кубики. Пример Лего. Но если из Кубиков Лего можно собрать различную конструкцию, недостатком Лего является то что это должны быть кубики из Лего. Так и в моем способе. Но писать все эти кубики библиотеки, писать к ним мануалы, проводить усиленную рекламу мне это не по силам. Тем более надо подымать уровень новичков, которые не хотят этот уровень подымать.
Шаговые двигатели (ШД)это замечательно. Но в отличии от двигателей постоянного тока , где подал напряжение и ШИМ , и двигатель работает долго. В ШД нужно проводить тактирование программно. А это лишний модуль или куча строк, которые или могут запутать понимание и работу программы, где работу выполняет один процессор.
ПС: Вот еще немного дописал. Но там есть еще косяки.