2017-04-07 111 views
-5

我解释我的问题:我试图解决一个数组有问题,我有一个程序在OOP中完成,其中有一个类叫做lights。我想要的是做一个数组与内部的PIN码,并将其设置为输出。我做了一针一针,这很容易做到,但现在我想用一个for循环和一个数组来做到这一点 我不知道如何构建一个构造函数和处理这个数组与白色针数字在其中。数组,构造函数和实例

//---------------------------------------------------------------------------------- 
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

Java和C++是两种截然不同的语言。选一个。 –

+0

@OusmaneMahyDiaw OP已经标记了java和C++的问题,这是山姆所指的 – Ishnark

回答

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

的优势,这种模式是你的程序可以在方面,而不是担心引脚。

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}你想象,在那之后的方法只设置为高电平引脚可能甚至不有LED指示灯:)

(你应该有通过的方式使用的睡眠和玩关闭打开的LED,所以你可以看到他们是如何闪烁)

-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