два цикла одновременно
- Войдите на сайт для отправки комментариев
Втр, 25/08/2020 - 12:19
Здравствуйте!
Есть две соединённые пластины, типа нога...
На каждой пластине установлены двигатели и MPU6050 (акселерометр + гироскоп).
Мне нужно, когда пластина-"бедро" поднимается вверх (мотор1 крутит вперёд) до определённого угла на MPU6050, а пластина-"голень" (мотор2 крутит назад) до определённого угла на другом MPU6050, сделать так, чтобы оба двигателя крутили одновременно...
Как можно "заставить" два цикла работать одновременно?
Или есть иной способ?

А где тут два цикла взялись? Ты один угол в порядок приведи, потом будет понятно что делать с двумя.
Как можно "заставить" два цикла работать одновременно?
а в чем проблема? Вы сами пробовали? Если да - показывайте код
Как можно "заставить" два цикла работать одновременно?
Енто`ж елементарно, Ваццон: две дурдуины+синяя изолента.
А где тут два цикла взялись? Ты один угол в порядок приведи, потом будет понятно что делать с двумя.
А что с углом не так?
Ну если всё так, то тему можно закрывать.
Как можно "заставить" два цикла работать одновременно?
а в чем проблема? Вы сами пробовали? Если да - показывайте код
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
конечно
Я в ветке для новичков создал тему и задал вопрос... А оказалось, что тут самородки-петросяны...
а я еще раз спрашиваю - в чем проблема то у вас? Формулируйте точнее.
Вы спрашивали "можно ли заставить исполнятся два цикла?" - да запросто:
for (int i =0; i<16; i++) { for (int j =0; j<i; j++) { // делаем что-то } }А если цель вашего прихода на форум - не разобраться в циклах, а банально чтобы кто-то написал вам готовый код для вашего робота - так за этим в раздел "Ищуисполнителя"
707-й, ну жеж рано жеж исчо...
Мне показалось, что я как раз и спрашиваю: можно ли "заставить" два цикла работать одновременно?
Мне тоже так показалось и я уже был готов дать ответ: в чистом виде - нет, нельзя.
Потом таки прочитал описание Вашей хотелки и понял что Вы впали в типичную ошибку полуновичка (который уже слышал какие-то слова). Вы спрашиваете НЕ то, что Вам нужно, а как реализовать уже придуманное Вами неправильное решение.
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
Так вот, моторы заставить крутиться можно, но для этого нахрен не нужно одновременно выполнять два цикла.
Я ответил на Ваш вопрос?
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
Так вот, моторы заставить крутиться можно, но для этого нахрен не нужно одновременно выполнять два цикла.
Я ответил на Ваш вопрос?
У меня не сервы, а двигатели постоянного тока с червячным редуктором...
Не подскажете как? Хотя бы примерный скетч...
Не подскажете как? Хотя бы примерный скетч...
Сделайте скетч для одной "ноги" сначала. А потом уже будем обсуждать как и вторую одновременно крутить.
Не подскажете как? Хотя бы примерный скетч...
Если ты собрался заниматься робототехникой на базе IMU, не изучая самостоятельно теории, то бросай это дело. Ничего не получится.
Не подскажете как? Хотя бы примерный скетч...
/* Blink without Delay Turns on and off a light emitting diode (LED) connected to a digital pin, without using the delay() function. This means that other code can run at the same time without being interrupted by the LED code. The circuit: - Use the onboard LED. - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to the correct LED pin independent of which board is used. If you want to know what pin the on-board LED is connected to on your Arduino model, check the Technical Specs of your board at: https://www.arduino.cc/en/Main/Products created 2005 by David A. Mellis modified 8 Feb 2010 by Paul Stoffregen modified 11 Nov 2013 by Scott Fitzgerald modified 9 Jan 2017 by Arturo Guadalupi This example code is in the public domain. http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay */ // constants won't change. Used here to set a pin number: const int ledPin = LED_BUILTIN;// the number of the LED pin // Variables will change: int ledState = LOW; // ledState used to set the LED // Generally, you should use "unsigned long" for variables that hold time // The value will quickly become too large for an int to store unsigned long previousMillis = 0; // will store last time LED was updated // constants won't change: const long interval = 1000; // interval at which to blink (milliseconds) void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT); } void loop() { // here is where you'd put code that needs to be running all the time. // check to see if it's time to blink the LED; that is, if the difference // between the current time and last time you blinked the LED is bigger than // the interval at which you want to blink the LED. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } // set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); } }На мой взгляд, правда, написано довольно криво, но это считается классикой, поэтому размещаю так, как есть.
Не подскажете как? Хотя бы примерный скетч...
Сделайте скетч для одной "ноги" сначала. А потом уже будем обсуждать как и вторую одновременно крутить.
Ок. Сделаю. Но мне одной "ноги" будет достаточно...
Правильный вопрос был бы: можно ли два сервомотора заставить крутиться одновременно. Вам ведь именно это надо, а не циклы, правда?
У меня не сервы, а двигатели постоянного тока с червячным редуктором...
// бедро вперёд
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/программирование:конечный-автомат
Спасибо!