数组,构造函数和实例

时间:2017-04-07 19:43:57

标签: c++ arrays class arduino

我解释了我的问题:我试图解决数组问题,我在OOP中完成了一个程序,它有一个名为lights的类。我想要的是做一个内部有引脚号的数组并将它们设置为输出。我一个接一个地做了,很容易做但现在我想用for循环和数组做 我不知道如何构建一个构造函数,并在其中使用数组whit引号来处理它。

    //----------------------------------------------------------------------------------
class lights{

  int pins[5]; //array for 5 elements
  int i; 

  public:
  lights(int ledPins[]){

    for(i=0; i<5; i++){     //pins are set up as output
      pinMode(pins[i],OUTPUT);
    }

  }//end constructor


  void attempt(){                        //metodo para pobrar si se enciende los leds

    for(i=0; i<5; i++){
      digitalWrite(pins[i],HIGH);
      Serial.println(pins[i]);
    }
  }//end attempt
};//end class
//---------------------------------------------------------------------------------------------------------------------


int MyPins[] = {5,6,7,8,9};        //I declare what it is inside

lights lit(MyPins);                 //I create an objet with my array as parameters

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

void loop(){

  lit.attempt();

}

3 个答案:

答案 0 :(得分:0)

您不需要将所有内容都放入课堂中。我认为使用一个类灯是矫枉过正的。

根据我的经验,一个函数用于处理灯脚,它们都需要一个引脚枚举。

除非你有大量的引脚要设置,否则循环可能不值得。展开循环可以提高程序效率:

pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);

初始化通常只发生一次,因此通常不保证优化。

如果需要使用类,我建议一个模型一个类的类。

每盏灯都有一个相关的引脚。

您可以拥有一个灯光容器(例如数组):

class Light
{
  public:  
    Light(unsigned int pin)
      : m_pin(pin),
        m_is_on(false)
    { ; }

    void initialize(); // Sets up the appropriate pin
    void on(); // Turns on the light
    void off(); // Turns off the light
    void blink(unsigned int rate, unsigned int duration);

  private:
     unsigned int m_pin;
     bool         m_is_on;
};

Light display[] = {Light(5), Light(6), Light(7), Light(8), Light(9)};
const unsigned int light_quantity =
    sizeof(display) / sizeof(display[0]);

此型号的一个优点是您的程序可以是而不用担心引脚。

答案 1 :(得分:0)

您的代码无法正常工作,因为您只是编写代码但没有制作算法来首先设计应用程序......

花一点时间看看你写的软件是什么...... 你传递给构造函数一个数组,但你在哪里使用该信息?无处......

 lights(int ledPins[]){

    for(i=0; i<5; i++){     //pins are set up as output
      pinMode(pins[i],OUTPUT);
    }

  }//end constructor

并且您正在设置arduino中的输出{0 to 4}而不是{5 to 9},之后循环方法只是设置为高级引脚可能甚至没有LEDS :)

(顺便说一下你应该在那里使用睡眠和玩耍来关闭LED,这样你就可以看到它们是如何眨眼的)

答案 2 :(得分:-1)

我解决了问题:只丢失了两行。我纠正了真正的构造函数

public:
  lights(int ledPins[]){
    for(i=0; i<5; i++){    
      pines[i] = ledPines[i];
    for(i=0; i<5; i++){     //pins are set up as output
      pinMode(pins[i],OUTPUT);
    }

  }//end constructor