2013-10-25 40 views
1
int i = 1; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    if(i == 1){ 
     Serial.print(i); 
    } 
    i++; 
} 

这是打算只打印一次i的值。为什么它会一直打印1?混淆增量行为

此代码工作正常只写一次i

int i = 1; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    if(i == 1){ 
     Serial.print(i); 
    } 
    i = 2; 
} 
+0

这是整个程序吗?谁叫循环? –

+0

@MarkPlotnick这是一个arduino草图,所以我想在编译时连接的arduino库中调用'loop'。 –

+0

不确定,但尝试将'volatile'添加到'int i',也许它有一些优化类实际问题 –

回答

4

假设loop()被称为一个循环:

  • i将在第一个例子中溢出。

  • 在第二个示例中,它在第一次迭代之后固定为值2

+0

当然,如果我在条件之外添加另一个Serial.print(i),我会发现它会一直向上。谢谢! –

1

您可能还想添加一些延迟,因为有时您可能会错过第一个Serial.println();

类似的东西:

int i = 1; 

void setup() { 
    Serial.begin(9600); 
    delay(1000); //wait for one second 
} 

希望它能帮助!

1

如果你想让你的第一个例子工作更长时间。将“int”更改为“long”。

int只能存储2个字节。 -32,768至32,767。你会很快达到这个数字。 长可以存储4个字节。 -2,147,483,648至2,147,483,647。这将需要一个时间。