Zřetězit celá čísla jako řetězec [duplicate]

Tato otázka již má odpovědi zde :

Komentáře

  • Protože používáte pouze 1 sa 0 s, můžete jej také převést na třímístné číslo a vytisknout Serial.write(out1*100 + out2*10 + out3);
  • @Gerben: Myslíte Serial.println().
  • Oprava: Serial.println(out1*100 + out2*10 + out3); (díky @EdgarBonet)

Odpověď

Pokud právě odesíláte na sériové číslo, nemusíte spojovat – stačí vytisknout každý bit zvlášť, například:

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

Měli byste se vyhnout používání Stringu, protože to není dobré na zařízeních s malým množstvím paměti, jako je Arduinos. Inst Pokud opravdu potřebujete zřetězit čísla, měli byste použít řetězec C a možná snprintf do něj čísla naformátovat:

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

Odpověď

Zadávám Majenkově body týkající se pouze samostatného tisku bitů, pokud je to možné, a vyhýbání se String objekty.

Pokud však potřebujete vytvořit takový řetězec (ne objekt String, pouze obyčejný řetězec C), nepotřebujete sprintf(), což je docela velká funkce: můžete vytvořit řetězec znak po znaku. Například:

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

Používá se ternární operátor , což zde znamená „pokud out1 je HIGH, použijte znak "1", jinak použijte "0" „.

Nyní se stává, že v Arduinu HIGH znamená 1 a LOW znamená 0. A jednociferná čísla lze převést na znak pouhým přidáním číselného kódu znaku „0“, což je 48, ale lze jej zapsat jako "0" v C ++. Můžete tedy psát:

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

A můžete je dát dohromady jako:

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

odpověď

Serial.write (b) vytiskne jeden bajt, ne řetězec. K tisku řetězců a čísel použijte print ().

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *