Arduino 阿杜伊诺:在我的课堂上使用伺服系统会使它们一直旋转到一边
我试图创建一个控制两个伺服的新类。 我的代码编译得很好。然而,当我运行它的时候,伺服系统只是一路转向一个方向。这似乎发生在我尝试实例化类时(在构造函数中,我将类中的伺服连接到管脚) 在类的头文件中,我有 [更新]Arduino 阿杜伊诺:在我的课堂上使用伺服系统会使它们一直旋转到一边,arduino,Arduino,我试图创建一个控制两个伺服的新类。 我的代码编译得很好。然而,当我运行它的时候,伺服系统只是一路转向一个方向。这似乎发生在我尝试实例化类时(在构造函数中,我将类中的伺服连接到管脚) 在类的头文件中,我有 [更新] #ifndef ServoController_h #define ServoController_h #include "Arduino.h" #include <Servo.h> class ServoController { public:
#ifndef ServoController_h
#define ServoController_h
#include "Arduino.h"
#include <Servo.h>
class ServoController
{
public:
ServoController(int rotateServoPin, int elevateServoPin);
void rotate(int degrees);
void elevate(int degrees);
private:
Servo rotateServo;
Servo elevateServo;
int elevationAngle;
int azimuthAngle;
};
#endif
最后,到目前为止,我的arduino草图是:
#include <ServoController.h>
#include <Servo.h>
ServoController sc(2 , 3);
void setup()
{
}
void loop()
{
}
然后在草图的setup()函数中调用:
void setup()
{
sc.attachPins(2,3);
}
似乎如果我在setup()函数之外附加伺服,就会出现问题
[7月27日晚上9:13更新]
通过另一个测试验证了一些东西:
我创建了一个新的草图,其中在设置()之前附加了一个伺服:
#包括
伺服0;
伺服0。连接(2);
无效设置()
{
}
void loop()//此函数在setup()完成后重复运行
{
伺服0.写入(90);
延迟(2000年);
伺服0.写入(135);
延迟(2000年);
0.写入(45);
延迟(2000年);
}
当我尝试编译时,Arduino抛出一个错误:
testservotest:4:错误:在“.”标记之前需要构造函数、析构函数或类型转换
因此出现了一个错误,但在从类调用attach方法时没有抛出该错误
非常感谢对
servo0.attach()
的调用需要在设置例程中:
#include <Servo.h>
Servo servo0;
void setup(){
servo0.attach(2);
}
#包括
伺服0;
无效设置(){
伺服0。连接(2);
}
正如您在attachServo例行程序中发现的那样。您不需要额外的例程,只需在设置中调用attach方法。如果您希望在类中使用它,则必须在类中有一个方法来执行pin赋值,并在
设置()
(一次性赋值)或循环()
(程序执行期间的动态赋值)中调用此方法
当使用
Servo.h
库作为用于管理伺服输出的计时器时,无法在全局变量的构造函数中完成管脚分配,因为在创建对象和setup()之间,该计时器会损坏
已执行。您确定这两个伺服
对象没有意外出错吗?比如过早销毁,将它们附加到相同的pin码,等等?您需要在实例化类的地方发布实际代码,在我看来,上面的代码很好。可能是其他原因。在提供的代码中,您从未实际设置伺服的位置。因此,它们可能处于未定义的初始状态;sc.提升(45);但同样的事情还是发生了。谢谢,我真的让它工作了。在我的构造器中,我移除了将伺服系统连接到销上的线路。相反,我在类中添加了另一个名为attachServos(int RotateseServopin,int elevateServoPin)的方法,该方法执行附件。然后我在setup()函数中调用它。似乎如果我在setup()函数之外附加伺服,就会出现问题。这有意义吗?
void setup()
{
sc.attachPins(2,3);
}
#include <Servo.h>
Servo servo0;
servo0.attach(2);
void setup()
{
}
void loop() // this function runs repeatedly after setup() finishes
{
servo0.write(90);
delay(2000);
servo0.write(135);
delay(2000);
servo0.write(45);
delay(2000);
}
#include <Servo.h>
Servo servo0;
void setup(){
servo0.attach(2);
}