Arduino for循环结束时的延迟

Arduino for循环结束时的延迟,arduino,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

我已经编写了以下代码来一次点亮一行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);
  }
}
int-ledPins[]={7,8,9,10,11,12,13};
无效设置(){
对于(int i=0;i
以上方法很好。然而,在完成for循环之后,在重复之前有一个很长的延迟(大约10秒)

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

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

sizeof
可以通过获取整个数组的大小并将其除以单个元素的大小来确定数组中元素的数量

所以这一行:

for (int i = 0; i < sizeof(ledPins); i++) {
for(int i=0;i
应改写为:

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

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

#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);
  }
}
#定义无指示灯7
int LED引脚[无LED]={7,8,9,10,11,12,13};
无效设置(){
对于(int i=0;i
或者将数组大小的计算移到一个变量中并使用该变量

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);
  }
}
int-ledPins[]={7,8,9,10,11,12,13};
国际网络;
无效设置(){
noLeds=sizeof(LED引脚)/sizeof(int);
对于(int i=0;i
它应该按顺序闪烁所有LED吗?@JanDvorak是的,它按顺序闪烁每个LED,然后出现(不需要的)延迟…如果
sizeof
返回以字节为单位的大小,并且每个
int
都超过一个字节,则闪烁的指示灯将比实际闪烁的指示灯多。加上读取超过数组边界的未定义行为#define NO_LEDs 7最好与const unsigned int NO_LEDs=7类似;编译后的代码将是相同的,但需要进行类型检查对于第二段代码,最好将其计算成一个常量。即const unsigned int noLeds=sizeof(ledPins)/sizeof(int);绝对不需要将其作为变量。@Jan Dvorak.Arduino不是“派生的”使用C++,它使用的是GCC,这是C++。如果你不相信这会切换IDE到冗长模式,并且观察编译器做它的工作。它只是IDE,试图通过生成原型(并且在它做的工作很差)来伪装C++编译器。还有一个将main链接到草图的库,这样您就可以使用setup+loop而不是main。@UdoKlein抱歉,我现在找不到我的原始资源。Wikipedia和标记wiki现在都正确了。