Commenti
- Poiché utilizzi solo
1
se0
s, potresti anche convertirlo in un numero di tre cifre e stamparloSerial.write(out1*100 + out2*10 + out3);
- @Gerben: Intendi
Serial.println()
. - Correzione:
Serial.println(out1*100 + out2*10 + out3);
(grazie @EdgarBonet)
Risposta
Se stai solo trasmettendo in seriale non hai bisogno di concatenare – stampa semplicemente ogni bit separatamente, come:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
Dovresti evitare di usare String perché non va bene su dispositivi con piccole quantità di memoria come Arduinos. Inst ead se hai davvero bisogno di concatenare i numeri dovresti usare una stringa C e forse snprintf
per formattare i numeri al suo interno:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Risposta
Secondo Majenko “s i punti sulla stampa dei bit separatamente, se possibile, ed evitando String
oggetti.
Tuttavia, se hai bisogno di costruire una stringa di questo tipo (non un oggetto String, solo una semplice stringa C), non hai bisogno di sprintf()
, che è una funzione abbastanza grande: puoi costruire la stringa carattere per carattere. Ad esempio:
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);
Questo utilizza operatore ternario , che qui significa “se out1
è HIGH
, utilizza il carattere "1"
, altrimenti usa "0"
“.
Ora, succede che in Arduino HIGH
significa 1 e LOW
significa 0. E i numeri a una cifra possono essere convertiti in caratteri semplicemente aggiungendo il codice numerico del carattere “0”, che è 48 ma può essere scritto come "0"
in C ++. Quindi puoi scrivere:
out[0] = out1 + "0"; // convert number to character
E puoi mettere insieme tutto come:
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);
Risposta
Serial.write (b) stampa un byte non una stringa. Usa print () per stampare stringhe e numeri.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));