Sammankoppla heltal som sträng [duplicera]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Den här frågan har redan svar här :

Kommentarer

  • Eftersom du bara använder 1 s och 0 s, du kan också konvertera det till ett tresiffrigt nummer och skriva ut det Serial.write(out1*100 + out2*10 + out3);
  • @Gerben: Du menar Serial.println().
  • Korrigering: Serial.println(out1*100 + out2*10 + out3); (tack @EdgarBonet)

Svar

Om du bara matar ut till serie behöver du inte sammanfoga – skriv bara ut varje bit separat, såsom:

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

Du bör undvika att använda String eftersom det inte är bra på enheter med små mängder minne som Arduinos. ead om du verkligen behöver sammanfoga siffror ska du använda en C-sträng och kanske snprintf för att formatera siffrorna i den:

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

Svar

Jag andra Majenkos poäng om att bara skriva ut bitarna separat om möjligt och undvika String objekt.

Men om du behöver bygga en sådan sträng (inte String-objekt, helt enkelt C-sträng) behöver du inte sprintf(), vilket är en ganska stor funktion: du kan bygga strängen tecken för tecken. Till exempel:

 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);  

Detta använder ternär operatör , som här betyder ”om out1 är HIGH, använd sedan tecknet "1", använd annars "0" ”.

Nu händer det bara att i Arduino HIGH betyder 1 och LOW betyder 0. Och ensiffriga siffror kan omvandlas till tecken genom att bara lägga till den numeriska koden för tecknet ”0”, vilket är 48 men kan skrivas som "0" i C ++. Således kan du skriva:

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

Och du kan sätta ihop alla som:

 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);  

Svar

Serial.write (b) skriver ut en byte, inte en sträng. Använd print () för att skriva ut strängar och siffror.

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *