несколько индивидуальных сервоуправлений Arduino

Я хочу объявить в своем коде 11 серводвигателей. Есть ли лучший способ сделать это, чем просто объявить всех друг под другом. Причина в том, что у меня есть код, который будет устанавливать вращение по одному за раз. Лучше всего будет список, чтобы я мог перебирать сервер, который хочу переместить.

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
//и т. д
void moveServo(int n,int deg){
  servo[n].write(deg); //что-то вроде этого
}

, 👍-1

Обсуждение

Как правило, для управления серводвигателем вам необходимо разработать довольно хорошо синхронизированную последовательность импульсов. Обычно вы используете оборудование PWM внутри процессора. Последствия использования программного обеспечения? Импульсы могут немного дрожать, и это приводит к дрожанию сервоприводов. Если вы хотите использовать правильное оборудование (процессор), есть способы обойти это. Вы желаете такого ответа?, @st2000

Это для руки робота, поэтому я хочу отправить сообщение от Raspberry Pi, что я хочу переместить сервопривод [1] на 20 градусов. так что я могу двигаться косяк за раз., @vegiv

В зависимости от конкретного процессора в Arduino, который вы используете, аппаратных генераторов ШИМ может не хватить для обеспечения последовательности импульсов для управления 11 сервоприводами. Вы можете прибегнуть к использованию программного обеспечения для создания последовательностей импульсов. Но это может привести к некоторому дрожанию серводвигателей. Скорее всего, во время последовательной связи с Raspberry Pi., @st2000

Библиотека Servo.h может управлять 12 сервоприводами в '328P и 48 в 2560., @CrossRoads


2 ответа


0

Рассмотрите возможность использования определенного процессора/платы Arduino. В этой теме есть ссылки на использование платы Arduino 1280 с Библиотека сервоприводов Arduino для управления до 48 сервоприводов с использованием комбинации аппаратного и программного обеспечения.

В C++, когда вы "создаете экземпляр" класса, вы эффективно используете пространство памяти, поскольку на самом деле вы не создаете повторяющийся код. Все, что вы создаете, — это копии переменных, необходимых для поддержки каждого экземпляра. В памяти должна быть только одна копия кода. Для повторения каждого экземпляра можно использовать оператор switch/case.. р>

,

0

Во-первых: ваш код не будет работать, поскольку servo не определен и, следовательно, не является массивом для повторения. Вам нужно будет сначала определить массив, а затем заполнить его элементами Servo.

Servo servo[11];

void setup(){
    for(int i=0;i<11;i++){
        servo[i] = new Servo();
    }
}

Различные объекты Servo создаются динамически. В большинстве случаев использовать динамическое размещение на микроконтроллере с небольшим объемом оперативной памяти плохо, но это нормально, если вы используете его только один раз при запуске.

,