首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁能解释一下如何添加滑块对象,使其控制自己的单独伺服电机?

谁能解释一下如何添加滑块对象,使其控制自己的单独伺服电机?
EN

Stack Overflow用户
提问于 2019-04-22 05:59:45
回答 1查看 173关注 0票数 0

问题是,每次我添加一个滑块对象并试图通过不同的引脚将其连接到不同的伺服马达时,滑块都只能控制同一个伺服马达。它不允许我添加一个通过用户界面独立控制每个伺服电机的伺服电机。我使用Processing作为接口,使用Arduino作为IDE。

我已经尝试添加其他滑块对象,但他们仍然控制相同的伺服。我不知道问题是通过Arrduino还是正在处理。当我添加其他滑块时,我将它们连接到自己的引脚上,但仍然不允许单独控制它们。

处理代码:

代码语言:javascript
复制
import processing.serial.*;
import cc.arduino.*;
import controlP5.*;
ControlP5 controlP5;
Arduino arduino;
int servoAngle = 90;
void setup() {

 size(400,400);

 println(Arduino.list());
 arduino = new Arduino(this, Arduino.list()[0], 57600);

 for (int i = 0; i <= 13; i++)
 arduino.pinMode(i, Arduino.OUTPUT);

 controlP5 = new ControlP5(this);
 controlP5.addSlider("servoAngle",0,180,servoAngle,20,10,180,20);

}
void draw() {
 arduino.analogWrite(9, servoAngle);
 //delay(15);
}

Arduino代码:

代码语言:javascript
复制
    #include <Servo.h>
    #include <Firmata.h>
    Servo servos[MAX_SERVOS];
    byte servoPinMap[TOTAL_PINS];
    byte servoCount = 0;

void analogWriteCallback(byte pin, int value)
{
  if (IS_PIN_DIGITAL(pin)) {
    servos[servoPinMap[pin]].write(value);
  }
}

void systemResetCallback()
{
  servoCount = 0;
}

void setup()
{
  byte pin;

  Firmata.setFirmwareVersion(FIRMATA_FIRMWARE_MAJOR_VERSION, 
  FIRMATA_FIRMWARE_MINOR_VERSION);
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  Firmata.begin(57600);
  systemResetCallback();

  // attach servos from first digital pin up to max number of
  // servos supported for the board
  for (pin = 0; pin < TOTAL_PINS; pin++) {
    if (IS_PIN_DIGITAL(pin)) {
      if (servoCount < MAX_SERVOS) {
        servoPinMap[pin] = servoCount;
        servos[servoPinMap[pin]].attach(PIN_TO_DIGITAL(pin));
        servoCount++;
      }
    }
  }
}

void loop()
{
  while (Firmata.available())
    Firmata.processInput();
}

我希望能够添加3多个滑块,一个已经创建,但能够控制4个伺服马达,每个由自己的滑块控制,但我得到的结果是,每个额外的滑块控制相同的马达。

EN

回答 1

Stack Overflow用户

发布于 2019-05-25 01:20:04

完全取决于您运行的是哪种硬件。但我觉得你得换几个地方

(1)取消所有跟踪条值和pwm

代码语言:javascript
复制
 int servoAngle = 90; int servoAngle1 = 90; int servoAngle2 = 90; int servoAngle3 = 90;

(2)添加轨迹栏

代码语言:javascript
复制
controlP5.addSlider("servoAngle",0,180,servoAngle,20,10,180,20);
controlP5.addSlider("servoAngle1",0,180,servoAngle1,20,10,180,20);
controlP5.addSlider("servoAngle2",0,180,servoAngle2,20,10,180,20);
controlP5.addSlider("servoAngle3",0,180,servoAngle3,20,10,180,20);

(3)连接硬件引脚。完全依赖于硬件,不知道你使用的是哪一个。我把这里作为样本

代码语言:javascript
复制
 arduino.analogWrite(9, servoAngle);
 arduino.analogWrite(10, servoAngle);
 arduino.analogWrite(11, servoAngle);
 arduino.analogWrite(12, servoAngle);
 //delay(15);
}

这或多或少应该做到了。你知道,许多年前,我们必须编写我们自己的处理到arduino串行协议才能做到这一点。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55787126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档