Komentáře
- Protože používáte pouze
1
sa0
s, můžete jej také převést na třímístné číslo a vytisknoutSerial.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));