2013-10-25 64 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。這將需要一個時間。