2

我编写了以下代码来一次点亮一排 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 秒)。

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

4

2 回答 2

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

于 2012-10-19T11:51:31.787 回答
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);
  }
}
于 2013-01-18T23:23:27.453 回答