два цикла одновременно
- Войдите на сайт для отправки комментариев
Втр, 25/08/2020 - 12:19
Здравствуйте!
Есть две соединённые пластины, типа нога...
На каждой пластине установлены двигатели и MPU6050 (акселерометр + гироскоп).
Мне нужно, когда пластина-"бедро" поднимается вверх (мотор1 крутит вперёд) до определённого угла на MPU6050, а пластина-"голень" (мотор2 крутит назад) до определённого угла на другом MPU6050, сделать так, чтобы оба двигателя крутили одновременно...
Как можно "заставить" два цикла работать одновременно?
Или есть иной способ?
А где тут два цикла взялись? Ты один угол в порядок приведи, потом будет понятно что делать с двумя.
Как можно "заставить" два цикла работать одновременно?
а в чем проблема? Вы сами пробовали? Если да - показывайте код
Как можно "заставить" два цикла работать одновременно?
Енто`ж елементарно, Ваццон: две дурдуины+синяя изолента.
А где тут два цикла взялись? Ты один угол в порядок приведи, потом будет понятно что делать с двумя.
А что с углом не так?
Ну если всё так, то тему можно закрывать.
Как можно "заставить" два цикла работать одновременно?
а в чем проблема? Вы сами пробовали? Если да - показывайте код
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
конечно
Я в ветке для новичков создал тему и задал вопрос... А оказалось, что тут самородки-петросяны...
а я еще раз спрашиваю - в чем проблема то у вас? Формулируйте точнее.
Вы спрашивали "можно ли заставить исполнятся два цикла?" - да запросто:
А если цель вашего прихода на форум - не разобраться в циклах, а банально чтобы кто-то написал вам готовый код для вашего робота - так за этим в раздел "Ищуисполнителя"
707-й, ну жеж рано жеж исчо...
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
Мне тоже так показалось и я уже был готов дать ответ: в чистом виде - нет, нельзя.
Потом таки прочитал описание Вашей хотелки и понял что Вы впали в типичную ошибку полуновичка (который уже слышал какие-то слова). Вы спрашиваете НЕ то, что Вам нужно, а как реализовать уже придуманное Вами неправильное решение.
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
Так вот, моторы заставить крутиться можно, но для этого нахрен не нужно одновременно выполнять два цикла.
Я ответил на Ваш вопрос?
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
Так вот, моторы заставить крутиться можно, но для этого нахрен не нужно одновременно выполнять два цикла.
Я ответил на Ваш вопрос?
У меня не сервы, а двигатели постоянного тока с червячным редуктором...
Не подскажете как? Хотя бы примерный скетч...
Не подскажете как? Хотя бы примерный скетч...
Сделайте скетч для одной "ноги" сначала. А потом уже будем обсуждать как и вторую одновременно крутить.
Не подскажете как? Хотя бы примерный скетч...
Если ты собрался заниматься робототехникой на базе IMU, не изучая самостоятельно теории, то бросай это дело. Ничего не получится.
Не подскажете как? Хотя бы примерный скетч...
На мой взгляд, правда, написано довольно криво, но это считается классикой, поэтому размещаю так, как есть.
Не подскажете как? Хотя бы примерный скетч...
Сделайте скетч для одной "ноги" сначала. А потом уже будем обсуждать как и вторую одновременно крутить.
Ок. Сделаю. Но мне одной "ноги" будет достаточно...
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
У меня не сервы, а двигатели постоянного тока с червячным редуктором...
// бедро вперёд
unsigned long StartTime = millis();
while(millis() - StartTime < 500UL) {
motorA.runForward(125); // бедро двигается вперёд
// голень назад
while(millis() - StartTime < 500UL) {
motorB.runReverse(105); // бедро двигается вперёд
}
motorB.stop(); // остановка движения голени
}
motorA.stop(); // остановка движения бедра
Как-то так...
// бедро вперёд
unsigned long StartTime = millis();
while(millis() - StartTime < 500UL) {
motorA.runForward(125); // бедро двигается вперёд
// голень назад
while(millis() - StartTime < 500UL) {
motorB.runReverse(105); // бедро двигается вперёд
}
motorB.stop(); // остановка движения голени
}
motorA.stop(); // остановка движения бедра
Как-то так...
Каша какая
Каша какая
А конкретнее?
А конкретнее?
ничего не изменилось с прошлого раза - вы опять пытаетесь запустить 2 цикла одновременно. Причем сейчас взяли для этого цикл while - худший вариант из того что можно выбрать. потому что он блокирующий. По сути ваш код аналогичен применению delay() со всеми вытекающими последствиями.
Вам же написали, что вашу задачу так не решить....
Конкретнее этот код пишется вот так.
И про "брось это дело" я не шутил. Тебе эта задача реально не по зубам в ближайшие 2 года.
Конкретнее этот код пишется вот так.
Мне нужно ограничить работу моторов значениями датчиков...
Именно поэтому я и обратился в раздел для новичков!
Конкретнее этот код пишется вот так.
Мне нужно ограничить работу моторов значениями датчиков...
Тогда убирайте delay и вместо этого следите за датчиками и, когда надо - выключайте моторы.
И тебе в первом же ответе было сказано что делать, и чего ты не сделал до сих пор.
Именно поэтому я и обратился в раздел для новичков!
Попробуйте осилить. Вроде тут достаточно просто описано. Оно именно об этом и все вам понадобится, хотя может и не сразу. Обратите внимание, что цикл тут только один общий - loop(), именно так делается одновременно много разных действий.
http://wiki.amperka.ru/программирование:конечный-автомат
Попробуйте осилить. Вроде тут достаточно просто описано. Оно именно об этом и все вам понадобится, хотя может и не сразу. Обратите внимание, что цикл тут только один общий - loop(), именно так делается одновременно много разных действий.
http://wiki.amperka.ru/программирование:конечный-автомат
Спасибо!