Arduino - 变量应该增加第二个变量 - 总是只等于第二个变量

时间:2014-06-02 07:05:53

标签: c arduino

以下代码是较大项目的一部分。目的是按时刷新带有变量的LED,重置开启时间并累计总数" on"时间。每次" on"时间都会改变。期过了。

以下代码似乎成功更改了" on"时间结束时每个" on"时间段,但不累计总时间 我希望第一次通过时的ledtime等于LED_ON(例如1000),然后在第二次通过时等于前一个ledtime + LED_ON(例如1000 + 2538 = 3528)。

相反,ledtime总是等于当前的LED_ON,因此看起来每次传递时ledtime总是设置为零,我不明白。

我是arduino / C编程的新手并且怀疑我错过了一些非常简单/明显的东西,但是已经玩了一段时间没有解决方案(包括将ledtime = etc语句移动到其中的各个区域)眨眼常规)。

long ledtime;


const int LED_PIN = 13;
const int grnled = 11;
unsigned long LED_ON = 800;       //milliseconds
int LED_OFF = 2000;
int redled = 10;
int yellowled = 12;

unsigned long ms;        //time from millis()
unsigned long msLast;
unsigned long mslast2;//last time the LED changed state
boolean ledState;        //current LED state

void setup(void)
{
  pinMode(grnled, OUTPUT);
  pinMode(redled,OUTPUT);
  pinMode(yellowled,OUTPUT);

  Serial.begin(9600);

}

void loop(void)
{
  while(millis()<5000) {
    digitalWrite(redled,HIGH);
    digitalWrite(yellowled,LOW);
  }
  while (millis() >(5000) && millis()< 20000){


    ms = millis();
    blinkLED();
  }
  if (millis() > 20000 && millis() < 30000) {
    digitalWrite(redled,HIGH);
  }
  if (millis() > 30000) {
    digitalWrite(yellowled,HIGH);
    digitalWrite(redled, LOW);
  }

}
void blinkLED(void)
{


  if (ms - msLast > (ledState ? LED_ON : LED_OFF)) {
    digitalWrite(grnled, ledState = !ledState);
    msLast = ms;
    long ledtime = ledtime + LED_ON;   //this does not work
    Serial.println("ledtime = ");
    Serial.println(ledtime);

    if (ms-mslast2> LED_ON) {
      LED_ON = random(500,5000); //this works
      LED_OFF = 2000;
      mslast2 = ms;
      Serial.println("LED_ON = ");
      Serial.println(LED_ON);


    }

  }
}

1 个答案:

答案 0 :(得分:2)

我不太确定您要尝试做什么,但是根据您评论的行,您创建了一个本地变量ledtime,其名称与您的全局变量相同。因为它是你的功能的本地,它会在你的功能结束时被删除。

首先在宣布时将led时间初始化为0, 然后尝试用

替换这一行
ledtime += LED_ON;