我正在尝试创建一个控制两个伺服系统的新类。我的代码编译得很好。但是,当我运行它时,伺服系统只是一直转向一个方向。这似乎发生在我尝试实例化类时(在构造函数中,我将类中的伺服器连接到引脚)。
在我班级的头文件中,我有 [更新]
#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
到目前为止我的课程的代码:
#include "Arduino.h"
#include "ServoController.h"
ServoController::ServoController(int rotateServoPin, int elevateServoPin)
{
azimuthAngle = 0;
elevationAngle = 0;
elevateServo.attach(elevateServoPin);
rotateServo.attach(rotateServoPin);
}
void ServoController::rotate(int degrees)
{
//TO DO
rotateServo.write(degrees);
}
void ServoController::elevate(int degrees)
{
//TO DO
elevateServo.write(degrees);
}
最后,到目前为止我的 arduino 草图只是:
#include <ServoController.h>
#include <Servo.h>
ServoController sc(2 , 3);
void setup()
{
}
void loop()
{
}
我很确定我使用的电路很好,因为如果我不使用我的课程,而直接在我的 arduino 文件中使用伺服库,伺服系统会正确移动。
任何想法为什么会发生这种情况?
[更新]
我实际上得到了这个工作。在我的构造函数中,我删除了将伺服系统连接到引脚的线路。相反,我在我的类中添加了另一种方法来执行附件。
ServoController::ServoController(int rotateServoPin, int elevateServoPin)
{
azimuthAngle = 0;
elevationAngle = 0;
// elevateServo.attach(elevateServoPin);
// rotateServo.attach(rotateServoPin);
}
void ServoController::attachPins(int rotateServoPin, int elevateServoPin)
{
azimuthAngle = 0;
elevationAngle = 0;
elevateServo.attach(elevateServoPin);
rotateServo.attach(rotateServoPin);
}
然后我在我的草图的 setup() 函数中调用它:
void setup()
{
sc.attachPins(2,3);
}
似乎如果我将伺服器附加到 setup() 函数之外,就会出现问题。
[更新 7 月 27 日晚上 9:13]
用另一个测试验证了一些东西:
我创建了一个新草图,在 setup() 之前附加了一个伺服:
#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);
}
当我尝试编译时,Arduino 抛出一个错误:
“testservotest:4:错误:预期的构造函数,析构函数,或'。'之前的类型转换 令牌”
所以出现了错误,但是从一个类调用attach方法的时候没有抛出
非常感谢