Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 阿杜伊诺:在我的课堂上使用伺服系统会使它们一直旋转到一边_Arduino - Fatal编程技术网

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);
}