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



下面的代码是一个更大项目的一部分。其目的是闪烁一个led与时间变量,重置时间和累计总"开"的时间。每次"on"周期结束后,启动时间就会更改。

下面的代码似乎成功地改变了每个"开"时间段结束时的"开"时间,但没有累积总时间。
我期望ledtime在第一次传递时等于LED_ON(例如1000),然后在第二次传递时等于先前的ledtime + LED_ON(例如1000 + 2538 = 3528)等。

相反,ledtime总是等于当前的LED_ON,所以看起来ledtime总是在每次通过时设置为零,这我不明白。

我是arduino/C编程的新手,怀疑我错过了一些非常简单/明显的东西,但是已经玩了一段时间没有分辨率(包括将ledtime = etc语句移动到blink例程中的各个区域)。

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

    }
  }
}

我不太确定你想做什么,但是在你注释的那一行,你创建了一个局部变量ledtime,它与你的全局变量同名。因为它是函数的局部,所以它在函数结束时被擦除。

那么首先在声明ledtime时将其初始化为0,然后尝试用

替换这一行
ledtime += LED_ON;

相关内容

最新更新