for循环结束时延迟

时间:2012-10-19 11:41:15

标签: arduino

我已经编写了以下代码,一次点亮一行LED。

int ledPins[] = {7,8,9,10,11,12,13};

void setup() {
  for (int i = 0; i < sizeof(ledPins); i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < sizeof(ledPins); i++) {
    digitalWrite(i, HIGH);
    delay(1000);
    digitalWrite(i, LOW);
    delay(1000);
  }
}

以上工作正常。但是在完成for循环之后,在重复之前会有很长的延迟(大约10秒)。

为什么会有这么长的延迟?这是预期的还是我的代码有问题?

2 个答案:

答案 0 :(得分:4)

函数sizeof(array)以字节为单位返回内存中数组的大小。因为sizeof(int)可能不是1,所以你得到的值比预期的要大。

sizeof可用于确定数组中元素的数量,方法是获取整个数组的大小并将其除以单个元素的大小。

所以这一行:

for (int i = 0; i < sizeof(ledPins); i++) {

应改写为:

for (int i = 0; i < sizeof(ledPins) / sizeof(int); i++) {

请参阅: http://en.wikipedia.org/wiki/Sizeof

答案 1 :(得分:1)

在这种情况下,由于数组具有固定大小,因此执行此操作更简单:

#define NO_LEDS 7

int ledPins[NO_LEDS] = {7,8,9,10,11,12,13};

void setup() {
  for (int i = 0; i < NO_LEDS; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

或者将数组大小的计算移动到变量中并使用它。

int ledPins[] = {7,8,9,10,11,12,13};
int noLeds;

void setup() {
  noLeds = sizeof(ledPins) / sizeof(int);

  for (int i = 0; i < noLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}