使用Arduino类的循环问题

时间:2017-04-24 17:58:13

标签: c++ arduino

我在尝试使用Arduino中的类时遇到问题,我的特殊问题是我的代码无法按照我的想法工作。我将解释:

我创建了一个库,允许我控制一系列LED使它们闪烁,我想按照编程的次数重复它们。但是,我发现它有一个问题:当我运行代码时,循环将重复一次,它不会再次闪烁所有LED,就像代码应该这样做。这是代码:

标题

#ifndef Cluster_h
#define Cluster_h

#include "Storm.h"
#include "Arduino.h"

class Cluster{
    public:
        Cluster(int pin[]);
        void lightning(unsigned long g_glag[]);
    private:
        unsigned long currentmillis,prevmillis,g_flag[];
        int counter,u_flag;
        Storm* _led;
};



#endif

CPP文件

#include <Cluster.h>

Cluster::Cluster(int pin[]){
    Storm led[7]={Storm(pin[0]),Storm(pin[1]),Storm(pin[2]),Storm(pin[3]),Storm(pin[4]),Storm(pin[5]),Storm(pin[6])};
    _led=led;
    prevmillis=0;
    counter=0;
}

void Cluster::lightning(unsigned long g_flag[]){


    if(counter<=5){  
        currentmillis=millis();

        if(currentmillis-prevmillis>=g_flag[0]){
            _led[0].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[1]){
            _led[1].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[2]){
            _led[2].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[3]){
            _led[3].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[4]){
            _led[4].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[5]){
            _led[5].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[6]){
            prevmillis=currentmillis;
            counter=counter+1;
        }

    }
}

blinkled类中的Storm函数是从头文件导入的,此函数的作用是使特定LED闪烁(已定义)。有了这段代码,我希望闪烁的序列会重复5次,但正如我在开头提到的那样,它只会闪烁一次所有的LED。我还没有发现代码可能出现什么问题,如果你可以帮助我那将是非常棒的。

感谢您的时间,我还会将代码放在实现部分中,以防万一。

#include <Cluster.h>

int p[7]={2,3,4,5,6,7,8};
unsigned long gf[7]={50,70,110,150,220,240,1000};
Cluster cluster(p);

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  cluster.lightning(gf);
}

1 个答案:

答案 0 :(得分:0)

您没有设置prevmillis

更改您的功能

void Cluster::lightning(unsigned long g_flag[]){

    static unsigned long prevmillis=millis();
    if(counter<=5){  
        currentmillis=millis();

        if(currentmillis-prevmillis>=g_flag[0]){
            _led[0].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[1]){
            _led[1].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[2]){
            _led[2].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[3]){
            _led[3].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[4]){
            _led[4].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[5]){
            _led[5].blinkled();
        }
        if(currentmillis-prevmillis>=g_flag[6]){
            prevmillis=currentmillis;
            counter=counter+1;
        }

    }
}