2016-09-21 5 views
0

こんにちは私はロボットの歩行者のための構造の並べ替えを行うことができますservosの数を管理し、私はいくつかのサーボクラスを含むLimbクラスを作成しようとしているはい、私はサーボライブラリに組み込まれて使用していますが、私はまた、較正の目的のための値のオフセットを調整する)を調整したいとにかく聞くとにかく私のコードです。クラスの配列を含むクラスのArduinoの開始

問題は四肢クラスイニシエータ(下4行)である私は通常ちょうどまっすぐにコードの正しい行を求めて好まないし、それを把握することを好むが、IVは、私は

PS Iの考えることができるすべてのものを試してみましたapolagiseは、任意のがらくたのスペルと感謝

class ServoConfig{ 
    public : 
    float Offset; 
    float Scale; 
    bool Inversed; 

    Servo ServoV; 

    ServoConfig (float InOffset, float InScale, bool InInversed,int Pin){ 
     float Offset = InOffset; 
     float Scale = InScale; 
     bool Inversed = InInversed; 
     ServoV.attach(Pin); 
    } 

    void WriteToServo(float Angle){ 
    if (Inversed){ 
     ServoV.write((180-Angle)/Scale + Offset); 
    } 
    else{ 
     ServoV.write(Angle/Scale + Offset); 
    } 
    } 
}; 

class Limb{ 

    ServoConfig Servos[]; 

    Limb (ServoConfig InServos[]){ 
    ServoConfig Servos[] = InServos; 
    } 
}; 

答えて

0

のはC++でそう簡単ではありませんし、Arduinoの上でそれも難しくなります。

しかし、最初にコードに間違いがあります。ローカル変数によってクラスattibutesをシャドウイングたとえば:

ServoConfig (float InOffset, float InScale, bool InInversed,int Pin) { 
    float Offset = InOffset; // this will create new local variable and hides that one in class with the same name 
    float Scale = InScale;  // this too 
    bool Inversed = InInversed; // and this too 

同じことが四肢のコンストラクタであるが、それはとにかく動作しません。

どのように動作させることができますか?

#include <Servo.h> 

class ServoConfig { 
    public : 
    float Offset; 
    float Scale; 
    bool Inversed; 

    Servo ServoV; 

    ServoConfig (float InOffset, float InScale, bool InInversed,int Pin) 
     : Offset { InOffset } 
     , Scale { InScale } 
     , Inversed { InInversed } 
    { 
     ServoV.attach(Pin); // it might have to be attached in setup() as constructors are called before main() 
    } 

    void WriteToServo(float Angle){ 
     if (Inversed) { 
     ServoV.write((180-Angle)/Scale + Offset); 
     } else { 
     ServoV.write(Angle/Scale + Offset); 
     } 
    } 
}; 

ServoConfig servos[] = {{10,10,0,9},{0,1,0,10}}; // this makes servos of size two and calls constructors 

class Limb { 
    public: 
    ServoConfig * servos_begin; 
    ServoConfig * servos_end; 

    Limb(ServoConfig * beg, ServoConfig * end) 
     : servos_begin { beg } 
     , servos_end { end } 
    {;} 

    ServoConfig * begin() { return servos_begin;    } 
    ServoConfig * end() { return servos_end;    } 
    size_t   size() { return servos_end - servos_begin; } 
}; 

// much better than using sizeof(array)/sizeof(array[0]): 
template <class T, size_t size> size_t arraySize(T(&)[size]) { return size; } 

// create and construct Limb instance: 
Limb limb { servos, servos + arraySize(servos)}; 



void setup(){ 
    Serial.begin(9600); 
} 

void loop(){ 
    Serial.println("starting..."); 

    for (ServoConfig & servo : limb) { // this uses begin() and end() methods 
    servo.WriteToServo(90); 
    } 

    // or directly with array[] 
    for (ServoConfig & servo : servos) { 
    servo.WriteToServo(40); 
    } 
} 
+0

ありがとうございました。あなたは私に恥をかけました。終日過ごしてこのことを理解しようとしたが、まだ何も立たなかった。公平では、私が今日出くわしたものの多くは、あなたがしたことを説明しています。それ以外のことは分かっていませんでした –

関連する問題