首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么静态变量不允许循环()运行?

为什么静态变量不允许循环()运行?
EN

Stack Overflow用户
提问于 2013-03-23 23:44:42
回答 1查看 436关注 0票数 0

我正在为一盏模拟太阳的灯编写代码(根据真实的太阳升起和落下)。

我试图在循环中使用一个静态变量,以便统计自1/1/12 (上一个闰年(366天))以来的天数。

由于某些原因,程序只在变量未声明为静态时才能工作,但我需要计数器在每一天的迭代中持久化。

任何帮助都将不胜感激。谢谢。

代码语言:javascript
复制
// Sun Object 

#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3

//#define FADESPEED 480// make this higher to slow down
#define FADESPEED 120

void setup() {
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);


}

void loop() {

  // daylengths for 4 year's worth of days starting from jan 1 of Great year (366 days) (1/1/2012)
 int dayLengths[] = {33540000,
33540000,
33600000,
// ....
// hundreds of values omitted here
// ....
33360000,
33420000,
33480000,
33480000};


//2012 = 366 days + day # from jan 1st (in 2013)
//starts on 0th day so subtract 1
//ready to go for march 24st @ sunrise

 // why does it not function when day is static?????

     static int day = 449;


  int r, g, b;




   long start = millis();

   for (r = 0; r <256; r++){
     analogWrite(REDPIN, r);
     delay(FADESPEED);
   }

  //analogWrite(REDPIN, 255);

 for (g = 0; g < 230; g++) { 
    analogWrite(GREENPIN, (g*.4));
    delay(FADESPEED*2);

   }

   long stopped = millis();
   long elapsed = stopped - start;
                                          //approx
   // delays (amount of daylight - ( sunrise/sunset time )
 //  delay(dayLengths[day]- (97200*2));

     delay(dayLengths[day]- (elapsed*2));


   for (g = 230; g > 0; g--) { 
    analogWrite(GREENPIN, (g*.4));
    delay(FADESPEED*2);
   }

   for (r = 256; r >0; r--){
     analogWrite(REDPIN, r);
     delay(FADESPEED);
   }

   analogWrite(REDPIN,0);


   //delays (millis in 1 day) - (length of daylight)
   delay(86400000 - dayLengths[day]);



  // once 4 year cycle is over, resets day to 0
   if (day < sizeof(dayLengths  )){

   day++;
   }

   else
   {
   day = 0;

  } 

}
EN

回答 1

Stack Overflow用户

发布于 2013-03-24 03:13:00

这听起来像是在嵌入式环境中运行,并且本机硬件可能有一些限制:在loop函数中静态使用。

我已经讨厌自己提出这样的建议,但也许您可以尝试使用globalglobal static (即将day变量放在loop()函数之外,不管是否使用static关键字)。这将给它在所有loop()调用中的生存空间.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15593385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档