问题是,每次我添加一个滑块对象并试图通过不同的引脚将其连接到不同的伺服马达时,滑块都只能控制同一个伺服马达。它不允许我添加一个通过用户界面独立控制每个伺服电机的伺服电机。我使用Processing作为接口,使用Arduino作为IDE。
我已经尝试添加其他滑块对象,但他们仍然控制相同的伺服。我不知道问题是通过Arrduino还是正在处理。当我添加其他滑块时,我将它们连接到自己的引脚上,但仍然不允许单独控制它们。
处理代码:
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代码:
#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个伺服马达,每个由自己的滑块控制,但我得到的结果是,每个额外的滑块控制相同的马达。
发布于 2019-05-25 01:20:04
完全取决于您运行的是哪种硬件。但我觉得你得换几个地方
(1)取消所有跟踪条值和pwm
int servoAngle = 90; int servoAngle1 = 90; int servoAngle2 = 90; int servoAngle3 = 90;(2)添加轨迹栏
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)连接硬件引脚。完全依赖于硬件,不知道你使用的是哪一个。我把这里作为样本
arduino.analogWrite(9, servoAngle);
arduino.analogWrite(10, servoAngle);
arduino.analogWrite(11, servoAngle);
arduino.analogWrite(12, servoAngle);
//delay(15);
}这或多或少应该做到了。你知道,许多年前,我们必须编写我们自己的处理到arduino串行协议才能做到这一点。
https://stackoverflow.com/questions/55787126
复制相似问题