Доброго времени суток. У меня есть два кода, один что бы управлять сервой с помощью гироскопа (MPU6050), на этом реализована платформа, которая остается в горизонтальном положении не зависимо от того в каком положении находится объект на котором установлен гироскоп. И второй код для управления сервой с помощью потенциометра. Возник вопрос как объединить работу сервопривода от двух сигналов (с гироскопа и потенциометра)? Суть такова: гироскоп выполняет основную роль, но мне нужно потенциометром подрегулировать угол установки сервы когда это необходимо. Как совместить два кода что бы они работали совместно? что бы сигнал с гироскопа так же продолжал работать при новом угле вала сервопривода, установленного с помощью потенциометра? Специалисты в программировании, подскажите пожалуйста. Коды могу предоставить.
Да элементарно складываются сигналы. А чтобы "объединять коды" надо чуть-чуть научиться программировать, и понимать, что "коды" делают.
Спасибо за совет. Вот я и учусь программировать. Для меня код управления с MPU6050 сложный для понимания, и где там складывать сигнал и как не знаю.
Сделайте шаг назад, поделайте проекты попроще. Придет понимание. Вон в вики есть много чего интересного http://wiki.amperka.ru/
Спасибо. Мне бы пример, где реализовывается то о чем вы говорили, т.е. сложение двух сигналов с разных датчиков и их одновременная работа.
Это понятно. ВОт часть кода для управления сервой от гироскопа : // читаем пакет из FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // отслеживаем FIFO рассчитанный здесь, в случае, если есть >1 доступного пакета // (Это позволяет сразу читать дальше, не дожидаясь прерывания) fifoCount -= packetSize; #ifdef OUTPUT_READABLE_YAWPITCHROLL // представление углов Эйлера в градусах mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); Serial.print("ypr\t"); Serial.print(ypr[0] * 180/M_PI); Serial.print("\t"); Serial.print(ypr[1] * 180/M_PI); myservoY.write(int(ypr[1] * -180/M_PI)+90); // расчет вращения вокруг Y Serial.print("\t"); Serial.println(ypr[2] * 180/M_PI); myservoX.write(int(ypr[2] * 180/M_PI)+90); // расчет вращения вокруг X #endif А это код для управления сервой от потенциометра: int potent = analogRead(3); potent = map(potent, 0, 1023, 0, 180); servoX.write(potent); delay(10); Получается мне, для управления сервой X (myservoX) необходимо сточку myservoX.write(int(ypr[2] * 180/M_PI)+90); // расчет вращения вокруг X записать в следующем виде: myservoX.write(int(ypr[2] * 180/M_PI)+90)+(potent); // расчет вращения вокруг X Верно?
Спасибо. Скорее всего так верно: myservoX.write(int(ypr[2] * 180/M_PI)+90+(potent)); // расчет вращения вокруг X А потенциометр если так? potent = map(potent, 0, 682, 0, 120);
Спасибо, читал эту статью. Только не разобрался при изменении диапазона, например у меня углы отклонения до 180, уменьшаю до 120, тогда FromLow и FromHigh (нижняя и верхняя граница текущего диапазона) оставлять прежними или тоже уменьшить пропорционально уменьшению границ нового диапазона? 1023 приходилось на 180 градусов, значит на один градус приходится 1023/180=5,6833, если беру новый предел не 180, а 120 градусов, то тогда что бы найти верхнюю границу текущего диапазона нужно 120*5,6833=682. Вот у меня и получилось map(potent, 0, 682, 0, 120)