我在尝试使用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);
}
答案 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;
}
}
}