2016-02-18 2 views
1

У меня есть программа arduino в виду, которую я пытаюсь сделать.Объединение переменной int со строкой приводит к странному выводу

Цель: Read цифровых булавки от 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" '' делает в C. (Подсказка: выражение "1" имеет значение указателя) – immibis

+0

@immibis я должен использовать' я + «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 + pointer, что приводит к поврежденному указателю . Короткий путь исправления, который создает Строка из целочисленной переменной: Serial.println(String(i)+"1"). Это выражение оценивается как 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"); 
     } 
    } 
} 
Смежные вопросы