簡體   English   中英

將int變量與字符串連接會導致奇怪的輸出

[英]Concatenating an int variable with a string results in a strange output

我正在嘗試制作一個arduino程序。

其目的:從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_°

關於如何使它起作用的任何建議?

您的代碼會怎樣?

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");
    }
    ...

如另一個答案中所述,問題發生在Serial.println(i + "1") 該表達式被評估為int +指針 ,導致指針損壞。 一種簡單的修復方法是從整數變量創建StringSerial.println(String(i)+"1") 該表達式被評估為String +指針 ,該指針將導致一個有效的String對象。

更正的代碼:

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");
       }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM