Concatena interi come stringa [duplicate]

Questa domanda ha già una risposta qui :

Commenti

  • Poiché utilizzi solo 1 se 0 s, potresti anche convertirlo in un numero di tre cifre e stamparlo Serial.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)); 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *