将int变量与字符串连接会导致奇怪的输出

时间:2016-02-18 03:23:53

标签: c++ arduino

我有一个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");
   }
  }
}

输出应&#34; 21&#34;如果引脚2是HIGH,或者#34; 20&#34;如果引脚2是LOW。这同样适用于其他引脚。

相反,所有打印的内容都是

Ò>Tm_°

>Tm_°

>Tm_°

Tm_°







Ò>Tm_°

>Tm_°

>Tm_°

Tm_°

关于如何让它发挥作用的任何建议?

2 个答案:

答案 0 :(得分:1)

您的代码会发生什么?

Serial.println(2 + "1")在C中不会给你21(在这种情况下用于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 :(得分:1)

如其他答案所述,问题发生在Serial.println(i + "1")。此表达式计算为 int + pointer ,导致指针损坏。解决这个问题的一个简单方法是从整数变量Serial.println(String(i)+"1")创建 String 。此表达式计算为 String + pointer ,从而生成有效的 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");
       }
    }
}