Voeg gehele getallen samen als string [duplicate]

Deze vraag heeft hier al antwoorden :

Reacties

  • Omdat je alleen 1 s en 0 s, je zou het ook kunnen converteren naar een driecijferig getal, en dat Serial.write(out1*100 + out2*10 + out3);
  • @Gerben: je bedoelt Serial.println().
  • Correctie: Serial.println(out1*100 + out2*10 + out3); (bedankt @EdgarBonet)

Antwoord

Als u “gewoon naar serieel uitvoert, hoeft u deze niet aaneen te schakelen – druk gewoon elk bit afzonderlijk af, zoals:

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

U moet het gebruik van String vermijden, aangezien het niet goed is op apparaten met een kleine hoeveelheid geheugen zoals Arduinos. Inst ead als je echt getallen moet samenvoegen, moet je een C-string gebruiken en misschien snprintf om de getallen erin op te maken:

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

Antwoord

Ik sluit aan bij Majenkos opmerkingen over het zo mogelijk apart afdrukken van de bits, en het vermijden van String objecten.

Als je echter zon string moet bouwen (niet String-object, gewoon C-string), heb je sprintf(), wat een vrij grote functie is: je kunt de string karakter voor karakter opbouwen. Bijvoorbeeld:

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

Dit gebruikt de ternaire operator , wat hier betekent “if out1 is HIGH, gebruik dan het teken "1", gebruik anders "0" “.

Nu gebeurt het gewoon dat in Arduino HIGH betekent 1 en LOW betekent 0. En getallen van één cijfer kunnen worden omgezet in tekens door de numerieke code van teken “0” toe te voegen, wat 48 is, maar kan worden geschreven als "0" in C ++. Dus je kunt schrijven:

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

En je kunt alles samenvoegen als:

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

Antwoord

Serial.write (b) drukt één byte af, geen string. Gebruik print () om tekenreeksen en getallen af te drukken.

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *