Si solo está generando una salida en serie, no necesita concatenar; simplemente imprima cada bit por separado, como:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
Debe evitar usar String ya que no es bueno en dispositivos con pequeñas cantidades de memoria como Arduinos. Inst Lea, si realmente necesita concatenar números, debe usar una cadena C y tal vez snprintf
para formatear los números:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Secundo los puntos de Majenko sobre imprimir los bits por separado si es posible y evitar String
objetos.
Sin embargo, si necesita construir una cadena de este tipo (no un objeto String, solo una cadena C simple), no necesita sprintf()
, que es una función bastante grande: puede construir la cadena carácter por carácter. Por ejemplo:
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);
Esto está usando el operador ternario , que aquí significa «si out1
es HIGH
, entonces usa el carácter "1"
, de lo contrario use "0"
”.
Ahora, simplemente sucede que en Arduino HIGH
significa 1 y LOW
significa 0. Y los números de un solo dígito se pueden convertir en caracteres simplemente agregando el código numérico del carácter «0», que es 48 pero se puede escribir como "0"
en C ++. Por lo tanto, puede escribir:
out[0] = out1 + "0"; // convert number to character
Y puede poner todo junto 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);
Serial.write (b) imprime un byte, no una cadena. Utilice print () para imprimir cadenas y números.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));