我已经编写了以下代码,一次点亮一行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秒)。
为什么会有这么长的延迟?这是预期的还是我的代码有问题?
答案 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++) {
答案 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);
}
}