2016-02-18 29 views
1

我有一個arduino程序牢記,我正在努力。連接一個int變量與一個字符串導致一個奇怪的輸出

其目的: 閱讀來自2個數字引腳,至11 打印針數,和「1」,如果引腳爲高電平,或「0」,如果引腳爲低。

這就是我一直試圖做的事:

void loop() { 
    for(int i = 2; i<12; i++){ 
    if(digitalRead(i) == HIGH){ 
     Serial.println(i + "1"); 
    } 
    if(digitalRead(i) == LOW){ 
    Serial.println(i + "0"); 
    } 
    } 
} 

輸出應該 「21」,如果2腳爲HIGH,或 「20」,如果2腳爲LOW。這同樣適用於其他引腳。

相反,所有它打印是

Ò>Tm_° 

>Tm_° 

>Tm_° 

Tm_° 







Ò>Tm_° 

>Tm_° 

>Tm_° 

Tm_° 

如何我能得到這個工作有什麼建議?

+1

猜1 +什麼' 「1」''確實在C.(提示:表述 「1」 的計算結果爲指針) – immibis

+0

@immibis我應該使用'I + 「1''? –

+2

使用'serial.print(i); serial.println(1);' – user3386109

回答

1

你的代碼會發生什麼?

Serial.println(2 + "1")不會給你21在C(在這種情況下用於Arduino)。

您試圖直接連接整數和字符串,並且它在C(或幾乎編程語言)中無效。

解決方案:

void loop() { 
    char pin_display; 
    for(int i = 2; i<12; i++){ 
    if(digitalRead(i) == HIGH){ 
     pin_display = i + 0x30 //convert to Ascii 
     Serial.print(pin_display); 
     Serial.print("1"); 
    } 
    ... 
1

正如在其他答覆中提到,問題發生在Serial.println(i + "1")。該表達式評估爲int +指針,其導致損壞的指針。解決該問題的一個簡短方法是從整型變量中創建一個字符串Serial.println(String(i)+"1")。該表達式評估爲字符串+指針,這導致有效的字符串對象。

更正代碼:

void loop() { 
    for(int i = 2; i<12; i++){ 
     if(digitalRead(i) == HIGH){ 
      Serial.println(String(i) + "1"); 
     } 
     if(digitalRead(i) == LOW){ 
     Serial.println(String(i) + "0"); 
     } 
    } 
} 
相關問題