Comentários
- Já que você só usa
1
se0
s, você também pode convertê-lo em um número de três dígitos e imprimirSerial.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));