To pytanie ma już tutaj odpowiedzi :
Komentarze
Odpowiedź
Jeśli wyprowadzasz tylko do serialu, nie musisz łączyć – po prostu wydrukuj każdy bit oddzielnie, takie jak:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
Powinieneś unikać używania String, ponieważ nie jest on dobry na urządzeniach z małą ilością pamięci, takich jak Arduinos. Inst jeśli naprawdę potrzebujesz konkatenacji liczb, powinieneś użyć łańcucha C i być może snprintf
, aby sformatować w nim liczby:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Odpowiedź
Wracam do uwag Majenko na temat drukowania bitów oddzielnie, jeśli to możliwe, i unikania String
obiekty.
Jednakże, jeśli musisz zbudować taki ciąg (nie obiekt typu String, tylko zwykły łańcuch C), nie potrzebujesz sprintf()
, co jest dość dużą funkcją: możesz budować łańcuch znak po znaku. Na przykład:
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);
To jest użycie operator trójskładnikowy , co tutaj oznacza „jeśli out1
to HIGH
, użyj znaku "1"
, w przeciwnym razie użyj "0"
”.
Tak się składa, że w Arduino HIGH
oznacza 1, a LOW
oznacza 0. A liczby jednocyfrowe można zamienić na znaki, dodając po prostu kod numeryczny znaku „0”, który wynosi 48, ale można go zapisać jako "0"
w C ++. W ten sposób możesz napisać:
out[0] = out1 + "0"; // convert number to character
I możesz złożyć wszystko razem 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);
Odpowiedź
Serial.write (b) drukuje jeden bajt, a nie łańcuch. Użyj print (), aby wydrukować ciągi i liczby.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));