Concatene inteiros como string [duplicado]

Esta pergunta já tem respostas aqui :

Comentários

  • Já que você só usa 1 se 0 s, você também pode convertê-lo em um número de três dígitos e imprimir Serial.write(out1*100 + out2*10 + out3);
  • @Gerben: Você quer dizer Serial.println().
  • Correção: Serial.println(out1*100 + out2*10 + out3); (obrigado @EdgarBonet)

Resposta

Se você está apenas enviando para serial, não precisa concatenar – apenas imprima cada bit separadamente, como:

Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3); 

Você deve evitar usar String, pois não é bom em dispositivos com pequenas quantidades de memória como Arduinos. Inst Em seguida, se você realmente precisa concatenar números, deve usar uma string C e talvez snprintf para formatar os números nela:

char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3); 

Resposta

Eu concordo com os pontos de Majenko sobre apenas imprimir os bits separadamente, se possível, e evitar String objetos.

No entanto, se você precisar construir tal string (não o objeto String, apenas string C simples), você não precisa de sprintf(), que é uma função bastante grande: você pode construir a string caractere por caractere. Por exemplo:

 char out[4]; // 3 + 1 char for the termination character out[0] = out1==HIGH ? "1" : "0"; out[1] = out2==HIGH ? "1" : "0"; out[2] = out3==HIGH ? "1" : "0"; out[3] = "\0"; // add NUL termination Serial.println(out);  

Isso está usando o operador ternário , que aqui significa “se out1 for HIGH, use o caractere "1", caso contrário, use "0" ”.

Agora, acontece que no Arduino HIGH significa 1 e LOW significa 0. E os números de um único dígito podem ser convertidos em caracteres apenas adicionando o código numérico do caractere “0”, que é 48, mas pode ser escrito como "0" em C ++. Assim, você pode escrever:

 out[0] = out1 + "0"; // convert number to character  

E você pode colocar todos juntos como:

 char out[4]; // 3 + 1 char for the termination character out[0] = digitalRead(r1) + "0"; out[1] = digitalRead(r2) + "0"; out[2] = digitalRead(r3) + "0"; out[3] = "\0"; // add NUL termination Serial.println(out);  

Resposta

Serial.write (b) imprime um byte, não uma string. Use print () para imprimir strings e números.

Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3)); 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *