2 つのサーボを制御する新しいクラスを作成しようとしています。私のコードは問題なくコンパイルされます。しかし、私がそれを実行すると、サーボは一方向に完全に回転します。これは、クラスをインスタンス化しようとすると発生するようです (コンストラクターで、クラス内のサーボをピンに接続するとき)。
私のクラスのヘッダーファイルには、[更新済み]があります
#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 メソッドが呼び出されたときにスローされませんでした
どうもありがとう